🛤 pybertini.tracking¶
quick nav links:
- jump to 👩‍🔧 Detailed
- jump to 🔦 Tutorials
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:
pybertini.tracking.AMPTracker
pybertini.tracking.DoublePrecisionTracker
pybertini.tracking.MultiplePrecisionTracker
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
pybertini.tracking.observers.amp
pybertini.tracking.observers.double
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