🛤 pybertini.tracking¶

quick nav links:

Notes¶

Trackers in Bertini2 are stateful objects, that refer to a system they are tracking, hold their specific settings, and have a notion of current time and space value.

Here are some particular classes and functions to pay attention to:

Here are the implemented ODE predictors you can choose from:

Calls to track_path() return a pybertini.tracking.SuccessCode.

And, trackers are implemented using observer pattern. They live in the pybertini.tracking.observers namespace, with provisions for each tracker type available under a submodule thereof: amp, multiple, and double. They are also conveniently available using the tr.observers, where tr is a tracker you already made. See pybertini.tracking.observers.amp

Auto-generated docs¶

Tracking-specific things – trackers, configs

class pybertini.tracking.AMPTracker((object)arg1, (System)arg2) → None¶

Bases: Boost.Python.instance

The adaptive multiple precision (AMP) tracker. Ambient numeric type is multiple-precision (mpfr_complex). Contruct one by feeding it a system – cannot be constructed without feeding it a system. Adjust its settings via configs and the setup function. Then, call method track_path.

add_observer((object)arg1, (object)arg2) → None¶
current_point((AMPTracker)arg1) → VectorXmp¶
current_precision((AMPTracker)arg1) → int¶
current_time((AMPTracker)arg1) → Complex¶
get_newton((AMPTracker)arg1) → NewtonConfig :¶

Get the tracker’s internal configuration for Newton correction

get_stepping((AMPTracker)arg1) → SteppingConfig :¶

Get the tracker’s internal configuration for things that control stepping behaviour

get_system((AMPTracker)arg1) → System :¶

Gets an internal reference to the tracked system.

infinite_truncation((AMPTracker)arg1, (bool)arg2) → None :¶

Decide whether the tracker should truncate infinite paths. See also infinite_truncation_tolerance

infinite_truncation( (AMPTracker)arg1) -> bool :
Get the bool for whether the tracker should truncate infinite paths. See also infinite_truncation_tolerance
infinite_truncation_tolerance((AMPTracker)arg1, (float)arg2) → None :¶

Set the path truncation tolerance for infinite paths for the tracker

infinite_truncation_tolerance( (AMPTracker)arg1) -> float :
Get the path truncation tolerance for infinite paths for the tracker
num_total_steps_taken((AMPTracker)arg1) → int :¶

Ask how many steps have been taken so far, including failures

observers = <module '_pybertini.tracking.observers.amp'>¶
precision_preservation((AMPTracker)arg1, (bool)arg2) → None :¶

Turn on or off the preservation of precision. That is, if this is on (true), then the precision of the final point will be the precision of the start point. Generally, you want to let precision drift, methinks.

precision_setup((AMPTracker)arg1, (AMPConfig)arg2) → None¶
predictor((AMPTracker)arg1) → Predictor :¶

Query the current predictor method used by the tracker.

predictor( (AMPTracker)arg1, (Predictor)arg2) -> None :
Set the predictor method used by the tracker.
refine() → object¶

refine() -> object

refine() -> object

refine() -> object

reinitialize_initial_step_size((AMPTracker)arg1, (bool)arg2) → None :¶

Set whether the tracker should re-set the stepsize to the configured-initial stepsize when it starts tracking. Feed it a bool

remove_observer((object)arg1, (object)arg2) → None¶
set_newton((AMPTracker)arg1, (NewtonConfig)arg2) → None :¶

Set the tracker’s internal configuration for Newton correction

set_stepping((AMPTracker)arg1, (SteppingConfig)arg2) → None :¶

Set the tracker’s internal configuration for things that control stepping behaviour

set_stepsize((AMPTracker)arg1, (Float)arg2) → None¶
setup((AMPTracker)arg1, (Predictor)predictor, (float)tolerance, (float)truncation, (SteppingConfig)stepping, (NewtonConfig)newton) → None :¶

Set values for the internal configuration of the tracker. tolerance and truncation are both real doubles. predictor is a valid value for predictor choice. stepping and newton are the config structs from pybertini.tracking.config.

track_path((AMPTracker)arg1, (VectorXmp)result, (Complex)start_time, (Complex)end_time, (VectorXmp)start_point) → SuccessCode :¶

The main function of the tracker, once its set up. Feed it, in (result, start_time, end_time, start_point

tracking_tolerance((AMPTracker)arg1) → float :¶

A step is labeled as a failure if newton correcting doesn’t yield a residual less than this tolerance. A real number, the smaller the slower tracking, generally speaking

tracking_tolerance( (AMPTracker)arg1, (float)arg2) -> None :
Set the tracking tolerance for the tracker
class pybertini.tracking.DoublePrecisionTracker((object)arg1, (System)arg2) → None¶

Bases: Boost.Python.instance

The double precision tracker. Tracks using only complex doubles. Ambient numeric type is double. Contruct one by feeding it a system – cannot be constructed without feeding it a system. Adjust its settings via configs and the setup function. Then, call method track_path.

add_observer((object)arg1, (object)arg2) → None¶
current_point((DoublePrecisionTracker)arg1) → VectorXd¶
current_precision((DoublePrecisionTracker)arg1) → int¶
current_time((DoublePrecisionTracker)arg1) → complex¶
get_newton((DoublePrecisionTracker)arg1) → NewtonConfig :¶

Get the tracker’s internal configuration for Newton correction

get_stepping((DoublePrecisionTracker)arg1) → SteppingConfig :¶

Get the tracker’s internal configuration for things that control stepping behaviour

get_system((DoublePrecisionTracker)arg1) → System :¶

Gets an internal reference to the tracked system.

infinite_truncation((DoublePrecisionTracker)arg1, (bool)arg2) → None :¶

Decide whether the tracker should truncate infinite paths. See also infinite_truncation_tolerance

infinite_truncation( (DoublePrecisionTracker)arg1) -> bool :
Get the bool for whether the tracker should truncate infinite paths. See also infinite_truncation_tolerance
infinite_truncation_tolerance((DoublePrecisionTracker)arg1, (float)arg2) → None :¶

Set the path truncation tolerance for infinite paths for the tracker

infinite_truncation_tolerance( (DoublePrecisionTracker)arg1) -> float :
Get the path truncation tolerance for infinite paths for the tracker
num_total_steps_taken((DoublePrecisionTracker)arg1) → int :¶

Ask how many steps have been taken so far, including failures

observers = <module '_pybertini.tracking.observers.double'>¶
predictor((DoublePrecisionTracker)arg1) → Predictor :¶

Query the current predictor method used by the tracker.

predictor( (DoublePrecisionTracker)arg1, (Predictor)arg2) -> None :
Set the predictor method used by the tracker.
refine() → object¶

refine() -> object

reinitialize_initial_step_size((DoublePrecisionTracker)arg1, (bool)arg2) → None :¶

Set whether the tracker should re-set the stepsize to the configured-initial stepsize when it starts tracking. Feed it a bool

remove_observer((object)arg1, (object)arg2) → None¶
set_newton((DoublePrecisionTracker)arg1, (NewtonConfig)arg2) → None :¶

Set the tracker’s internal configuration for Newton correction

set_stepping((DoublePrecisionTracker)arg1, (SteppingConfig)arg2) → None :¶

Set the tracker’s internal configuration for things that control stepping behaviour

set_stepsize((DoublePrecisionTracker)arg1, (float)arg2) → None¶
setup((DoublePrecisionTracker)arg1, (Predictor)predictor, (float)tolerance, (float)truncation, (SteppingConfig)stepping, (NewtonConfig)newton) → None :¶

Set values for the internal configuration of the tracker. tolerance and truncation are both real doubles. predictor is a valid value for predictor choice. stepping and newton are the config structs from pybertini.tracking.config.

track_path((DoublePrecisionTracker)arg1, (VectorXd)result, (complex)start_time, (complex)end_time, (VectorXd)start_point) → SuccessCode :¶

The main function of the tracker, once its set up. Feed it, in (result, start_time, end_time, start_point

tracking_tolerance((DoublePrecisionTracker)arg1) → float :¶

A step is labeled as a failure if newton correcting doesn’t yield a residual less than this tolerance. A real number, the smaller the slower tracking, generally speaking

tracking_tolerance( (DoublePrecisionTracker)arg1, (float)arg2) -> None :
Set the tracking tolerance for the tracker
class pybertini.tracking.MultiplePrecisionTracker((object)arg1, (System)arg2) → None¶

Bases: Boost.Python.instance

The fixed multiple precision tracker. Ambient numeric type is multiple-precision (mpfr_complex). Precision is the value of pybertini.default_precision() at contruction. Errors if you try to feed it things not at that precision. Contruct one by feeding it a system – cannot be constructed without feeding it a system. Adjust its settings via configs and the setup function. Then, call method track_path.

add_observer((object)arg1, (object)arg2) → None¶
current_point((MultiplePrecisionTracker)arg1) → VectorXmp¶
current_precision((MultiplePrecisionTracker)arg1) → int¶
current_time((MultiplePrecisionTracker)arg1) → Complex¶
get_newton((MultiplePrecisionTracker)arg1) → NewtonConfig :¶

Get the tracker’s internal configuration for Newton correction

get_stepping((MultiplePrecisionTracker)arg1) → SteppingConfig :¶

Get the tracker’s internal configuration for things that control stepping behaviour

get_system((MultiplePrecisionTracker)arg1) → System :¶

Gets an internal reference to the tracked system.

infinite_truncation((MultiplePrecisionTracker)arg1, (bool)arg2) → None :¶

Decide whether the tracker should truncate infinite paths. See also infinite_truncation_tolerance

infinite_truncation( (MultiplePrecisionTracker)arg1) -> bool :
Get the bool for whether the tracker should truncate infinite paths. See also infinite_truncation_tolerance
infinite_truncation_tolerance((MultiplePrecisionTracker)arg1, (float)arg2) → None :¶

Set the path truncation tolerance for infinite paths for the tracker

infinite_truncation_tolerance( (MultiplePrecisionTracker)arg1) -> float :
Get the path truncation tolerance for infinite paths for the tracker
num_total_steps_taken((MultiplePrecisionTracker)arg1) → int :¶

Ask how many steps have been taken so far, including failures

observers = <module '_pybertini.tracking.observers.multiple'>¶
predictor((MultiplePrecisionTracker)arg1) → Predictor :¶

Query the current predictor method used by the tracker.

predictor( (MultiplePrecisionTracker)arg1, (Predictor)arg2) -> None :
Set the predictor method used by the tracker.
refine() → object¶

refine() -> object

reinitialize_initial_step_size((MultiplePrecisionTracker)arg1, (bool)arg2) → None :¶

Set whether the tracker should re-set the stepsize to the configured-initial stepsize when it starts tracking. Feed it a bool

remove_observer((object)arg1, (object)arg2) → None¶
set_newton((MultiplePrecisionTracker)arg1, (NewtonConfig)arg2) → None :¶

Set the tracker’s internal configuration for Newton correction

set_stepping((MultiplePrecisionTracker)arg1, (SteppingConfig)arg2) → None :¶

Set the tracker’s internal configuration for things that control stepping behaviour

set_stepsize((MultiplePrecisionTracker)arg1, (Float)arg2) → None¶
setup((MultiplePrecisionTracker)arg1, (Predictor)predictor, (float)tolerance, (float)truncation, (SteppingConfig)stepping, (NewtonConfig)newton) → None :¶

Set values for the internal configuration of the tracker. tolerance and truncation are both real doubles. predictor is a valid value for predictor choice. stepping and newton are the config structs from pybertini.tracking.config.

track_path((MultiplePrecisionTracker)arg1, (VectorXmp)result, (Complex)start_time, (Complex)end_time, (VectorXmp)start_point) → SuccessCode :¶

The main function of the tracker, once its set up. Feed it, in (result, start_time, end_time, start_point

tracking_tolerance((MultiplePrecisionTracker)arg1) → float :¶

A step is labeled as a failure if newton correcting doesn’t yield a residual less than this tolerance. A real number, the smaller the slower tracking, generally speaking

tracking_tolerance( (MultiplePrecisionTracker)arg1, (float)arg2) -> None :
Set the tracking tolerance for the tracker
class pybertini.tracking.Predictor¶

Bases: Boost.Python.enum

Constant = _pybertini.tracking.Predictor.Constant¶
Euler = _pybertini.tracking.Predictor.Euler¶
Heun = _pybertini.tracking.Predictor.Heun¶
HeunEuler = _pybertini.tracking.Predictor.HeunEuler¶
RK4 = _pybertini.tracking.Predictor.RK4¶
RKCashKarp45 = _pybertini.tracking.Predictor.RKCashKarp45¶
RKDormandPrince56 = _pybertini.tracking.Predictor.RKDormandPrince56¶
RKF45 = _pybertini.tracking.Predictor.RKF45¶
RKNorsett34 = _pybertini.tracking.Predictor.RKNorsett34¶
RKVerner67 = _pybertini.tracking.Predictor.RKVerner67¶
names = {'Constant': _pybertini.tracking.Predictor.Constant, 'Euler': _pybertini.tracking.Predictor.Euler, 'Heun': _pybertini.tracking.Predictor.Heun, 'HeunEuler': _pybertini.tracking.Predictor.HeunEuler, 'RK4': _pybertini.tracking.Predictor.RK4, 'RKCashKarp45': _pybertini.tracking.Predictor.RKCashKarp45, 'RKDormandPrince56': _pybertini.tracking.Predictor.RKDormandPrince56, 'RKF45': _pybertini.tracking.Predictor.RKF45, 'RKNorsett34': _pybertini.tracking.Predictor.RKNorsett34, 'RKVerner67': _pybertini.tracking.Predictor.RKVerner67}¶
values = {0: _pybertini.tracking.Predictor.Constant, 1: _pybertini.tracking.Predictor.Euler, 2: _pybertini.tracking.Predictor.Heun, 3: _pybertini.tracking.Predictor.RK4, 4: _pybertini.tracking.Predictor.HeunEuler, 5: _pybertini.tracking.Predictor.RKNorsett34, 6: _pybertini.tracking.Predictor.RKF45, 7: _pybertini.tracking.Predictor.RKCashKarp45, 8: _pybertini.tracking.Predictor.RKDormandPrince56, 9: _pybertini.tracking.Predictor.RKVerner67}¶
class pybertini.tracking.SuccessCode¶

Bases: Boost.Python.enum

CycleNumTooHigh = _pybertini.tracking.SuccessCode.CycleNumTooHigh¶
ExternallyTerminated = _pybertini.tracking.SuccessCode.ExternallyTerminated¶
FailedToConverge = _pybertini.tracking.SuccessCode.FailedToConverge¶
Failure = _pybertini.tracking.SuccessCode.Failure¶
GoingToInfinity = _pybertini.tracking.SuccessCode.GoingToInfinity¶
HigherPrecisionNecessary = _pybertini.tracking.SuccessCode.HigherPrecisionNecessary¶
MatrixSolveFailure = _pybertini.tracking.SuccessCode.MatrixSolveFailure¶
MatrixSolveFailureFirstPartOfPrediction = _pybertini.tracking.SuccessCode.MatrixSolveFailureFirstPartOfPrediction¶
MaxNumStepsTaken = _pybertini.tracking.SuccessCode.MaxNumStepsTaken¶
MaxPrecisionReached = _pybertini.tracking.SuccessCode.MaxPrecisionReached¶
MinStepSizeReached = _pybertini.tracking.SuccessCode.MinStepSizeReached¶
MinTrackTimeReached = _pybertini.tracking.SuccessCode.MinTrackTimeReached¶
ReduceStepSize = _pybertini.tracking.SuccessCode.ReduceStepSize¶
SecurityMaxNormReached = _pybertini.tracking.SuccessCode.SecurityMaxNormReached¶
SingularStartPoint = _pybertini.tracking.SuccessCode.SingularStartPoint¶
Success = _pybertini.tracking.SuccessCode.Success¶
names = {'CycleNumTooHigh': _pybertini.tracking.SuccessCode.CycleNumTooHigh, 'ExternallyTerminated': _pybertini.tracking.SuccessCode.ExternallyTerminated, 'FailedToConverge': _pybertini.tracking.SuccessCode.FailedToConverge, 'Failure': _pybertini.tracking.SuccessCode.Failure, 'GoingToInfinity': _pybertini.tracking.SuccessCode.GoingToInfinity, 'HigherPrecisionNecessary': _pybertini.tracking.SuccessCode.HigherPrecisionNecessary, 'MatrixSolveFailure': _pybertini.tracking.SuccessCode.MatrixSolveFailure, 'MatrixSolveFailureFirstPartOfPrediction': _pybertini.tracking.SuccessCode.MatrixSolveFailureFirstPartOfPrediction, 'MaxNumStepsTaken': _pybertini.tracking.SuccessCode.MaxNumStepsTaken, 'MaxPrecisionReached': _pybertini.tracking.SuccessCode.MaxPrecisionReached, 'MinStepSizeReached': _pybertini.tracking.SuccessCode.MinStepSizeReached, 'MinTrackTimeReached': _pybertini.tracking.SuccessCode.MinTrackTimeReached, 'ReduceStepSize': _pybertini.tracking.SuccessCode.ReduceStepSize, 'SecurityMaxNormReached': _pybertini.tracking.SuccessCode.SecurityMaxNormReached, 'SingularStartPoint': _pybertini.tracking.SuccessCode.SingularStartPoint, 'Success': _pybertini.tracking.SuccessCode.Success}¶
values = {0: _pybertini.tracking.SuccessCode.Success, 1: _pybertini.tracking.SuccessCode.HigherPrecisionNecessary, 2: _pybertini.tracking.SuccessCode.ReduceStepSize, 3: _pybertini.tracking.SuccessCode.GoingToInfinity, 4: _pybertini.tracking.SuccessCode.FailedToConverge, 5: _pybertini.tracking.SuccessCode.MatrixSolveFailure, 6: _pybertini.tracking.SuccessCode.MatrixSolveFailureFirstPartOfPrediction, 7: _pybertini.tracking.SuccessCode.MaxNumStepsTaken, 8: _pybertini.tracking.SuccessCode.MaxPrecisionReached, 9: _pybertini.tracking.SuccessCode.MinStepSizeReached, 10: _pybertini.tracking.SuccessCode.Failure, 11: _pybertini.tracking.SuccessCode.SingularStartPoint, 12: _pybertini.tracking.SuccessCode.ExternallyTerminated, 13: _pybertini.tracking.SuccessCode.MinTrackTimeReached, 14: _pybertini.tracking.SuccessCode.SecurityMaxNormReached, 15: _pybertini.tracking.SuccessCode.CycleNumTooHigh}¶

🛤 pybertini.tracking.config¶

Tracking-specific configs

class pybertini.tracking.config.AMPConfig((object)arg1) → None¶

Bases: Boost.Python.instance

__init__( (object)arg1, (System)arg2) -> None

coefficient_bound¶
consecutive_successful_steps_before_precision_decrease¶
degree_bound¶
epsilon¶
max_num_precision_decreases¶
maximum_precision¶
phi¶
psi¶
safety_digits_1¶
safety_digits_2¶
set_amp_config_from((AMPConfig)arg1, (System)arg2) → None¶
set_bounds_and_epsilon_from((AMPConfig)arg1, (System)arg2) → None¶
set_phi_psi_from_bounds((AMPConfig)arg1) → None¶
class pybertini.tracking.config.FixedPrecisionConfig((object)arg1, (System)arg2) → None¶

Bases: Boost.Python.instance

class pybertini.tracking.config.NewtonConfig((object)arg1) → None¶

Bases: Boost.Python.instance

max_num_newton_iterations¶
min_num_newton_iterations¶
class pybertini.tracking.config.SteppingConfig((object)arg1) → None¶

Bases: Boost.Python.instance

consecutive_successful_steps_before_stepsize_increase¶

This number of successful steps have to taken consecutively, and then the stepsize is permitted to increase

frequency_of_CN_estimation¶

How frequently the condition number should be updated. Less frequently is faster (estimation requires an additional linear solve), but may cause precision adjustment to lag behind.

initial_step_size¶

The initial stepsize when tracking is started. See also tracking.AMPTracker.reinitialize_initial_step_size

max_num_steps¶

The maximum number of steps. Tracking will die if it tries to take more than this number, sad day.

max_step_size¶

The maximum allowed stepsize during tracking. See also min_num_steps

min_num_steps¶

The minimum number of steps the tracker can take between now and then. This is useful if you are tracking closely between times, and want to guarantee some number of steps are taken. Then again, this could be wasteful, too.

min_step_size¶

The minimum stepsize the tracker is allowed to take. See also max_step_size

step_size_fail_factor¶

The scale factor for stepsize, after a fail happens. See also step_size_success_factor

step_size_success_factor¶

The scale factor for stepsize, after some consecutive steps. See also consecutive_successful_steps_before_stepsize_increase

pybertini.tracking.config.amp_config_from((System)arg1) → AMPConfig :¶

make an AMPConfig from a System with generated settings for system-specific things, and default settings otherwise (such as safety digits).

🛤 pybertini.tracking.observers¶

đź“ť All of these are available for all trackers, though you should use the ones for your tracker type. Look in pybertini.tracking.AMPTracker.observers, etc.

Observers built to watch a tracker

  1. pybertini.tracking.observers.amp
  2. pybertini.tracking.observers.double
  3. pybertini.tracking.observers.multiple

đź“ť Symmetrically, there are the same observers in all three.

Observers built to watch an adaptive precision tracker

Know that you are loved and appreciated, dear reader. đź’ź

class pybertini.tracking.observers.amp.Abstract((object)arg1) → None¶

Bases: _pybertini.detail.AnyAbstractObserver

class pybertini.tracking.observers.amp.FirstPrecisionRecorder((object)arg1) → None¶

Bases: _pybertini.tracking.observers.amp.Abstract

class pybertini.tracking.observers.amp.GoryDetailLogger((object)arg1) → None¶

Bases: _pybertini.tracking.observers.amp.Abstract