leaspy.algo.abstract_algo.AbstractAlgo

class AbstractAlgo(settings: AlgorithmSettings)

Bases: ABC

Abstract class containing common methods for all algorithm classes. These classes are child classes of AbstractAlgo.

Parameters
settingsAlgorithmSettings

The specifications of the algorithm as a AlgorithmSettings instance.

Attributes
namestr

Name of the algorithm.

familystr
Family of the algorithm. For now, valid families are:
  • 'fit'`

  • 'personalize'`

  • 'simulate'

deterministicbool

True, if and only if algorithm does not involve in randomness. Setting a seed and such algorithms will be useless.

algo_parametersdict

Contains the algorithm’s parameters. Those are controlled by the AlgorithmSettings.parameters class attribute.

seedint, optional

Seed used by numpy and torch.

output_managerFitOutputManager

Optional output manager of the algorithm

Methods

load_parameters(parameters)

Update the algorithm's parameters by the ones in the given dictionary.

run(model, *args[, return_noise])

Main method, run the algorithm.

run_impl(model, *args, **extra_kwargs)

Run the algorithm (actual implementation), to be implemented in children classes.

set_output_manager(output_settings)

Set a FitOutputManager object for the run of the algorithm

load_parameters(parameters: dict)

Update the algorithm’s parameters by the ones in the given dictionary. The keys in the io which does not belong to the algorithm’s parameters keys are ignored.

Parameters
parametersdict

Contains the pairs (key, value) of the wanted parameters

Examples

>>> settings = leaspy.io.settings.algorithm_settings.AlgorithmSettings("mcmc_saem")
>>> my_algo = leaspy.algo.fit.tensor_mcmcsaem.TensorMCMCSAEM(settings)
>>> my_algo.algo_parameters
{'n_iter': 10000,
 'n_burn_in_iter': 9000,
 'eps': 0.001,
 'L': 10,
 'sampler_ind': 'Gibbs',
 'sampler_pop': 'Gibbs',
 'annealing': {'do_annealing': False,
  'initial_temperature': 10,
  'n_plateau': 10,
  'n_iter': 200}}
>>> parameters = {'n_iter': 5000, 'n_burn_in_iter': 4000}
>>> my_algo.load_parameters(parameters)
>>> my_algo.algo_parameters
{'n_iter': 5000,
 'n_burn_in_iter': 4000,
 'eps': 0.001,
 'L': 10,
 'sampler_ind': 'Gibbs',
 'sampler_pop': 'Gibbs',
 'annealing': {'do_annealing': False,
  'initial_temperature': 10,
  'n_plateau': 10,
  'n_iter': 200}}
property log_noise_fmt

Getter

Returns
formatstr

The format for the print of the loss

run(model: AbstractModel, *args, return_noise: bool = False, **extra_kwargs) Any

Main method, run the algorithm.

TODO fix proper abstract class method: input depends on algorithm… (esp. simulate != from others…)

Parameters
modelAbstractModel

The used model.

datasetDataset

Contains all the subjects’ observations with corresponding timepoints, in torch format to speed up computations.

return_noisebool (default False), keyword only

Should the algorithm return main output and optional noise output as a 2-tuple?

Returns
Depends on algorithm class: TODO change?
abstract run_impl(model: AbstractModel, *args, **extra_kwargs) Tuple[Any, Optional[torch.FloatTensor]]

Run the algorithm (actual implementation), to be implemented in children classes.

TODO fix proper abstract class

Parameters
modelAbstractModel

The used model.

datasetDataset

Contains all the subjects’ observations with corresponding timepoints, in torch format to speed up computations.

Returns
A 2-tuple containing:
  • the result to send back to user

  • optional float tensor representing noise std-dev (to be printed)

set_output_manager(output_settings)

Set a FitOutputManager object for the run of the algorithm

Parameters
output_settingsOutputsSettings

Contains the logs settings for the computation run (console print periodicity, plot periodicity …)

Examples

>>> from leaspy import AlgorithmSettings
>>> from leaspy.io.settings.outputs_settings import OutputsSettings
>>> from leaspy.algo.fit.tensor_mcmcsaem import TensorMCMCSAEM
>>> algo_settings = AlgorithmSettings("mcmc_saem")
>>> my_algo = TensorMCMCSAEM(algo_settings)
>>> settings = {'path': 'brouillons',
                'console_print_periodicity': 50,
                'plot_periodicity': 100,
                'save_periodicity': 50
                }
>>> my_algo.set_output_manager(OutputsSettings(settings))