Simulation

Inheritance Diagram

Inheritance diagram of tenpy.simulations.simulation.Simulation

Methods

Simulation.__init__(options, *[, ...])

Simulation.estimate_RAM()

Estimates the RAM usage for the simulation, without running it.

Simulation.final_measurements()

Perform a last set of measurements.

Simulation.fix_output_filenames()

Determine the output filenames.

Simulation.from_saved_checkpoint([filename, ...])

Re-initialize a given simulation class from checkpoint results.

Simulation.get_backup_filename(output_filename)

Extract the name used for backups of output_filename.

Simulation.get_measurement_psi_model(psi, model)

Get psi for measurements.

Simulation.get_output_filename()

Read out the output_filename from the options.

Simulation.get_resume_data()

Get resume data for a Simulation.

Simulation.get_version_info()

Try to save version info which is necessary to allow reproducibility.

Simulation.group_sites_for_algorithm()

Coarse-grain the model and state for the algorithm.

Simulation.group_split()

Split sites of psi that were grouped in group_sites_for_algorithm().

Simulation.handle_abort_signal(signum, frame)

Handle a SIGINT signal, usually caused by a CTRL-C press.

Simulation.init_algorithm(**kwargs)

Initialize the algorithm.

Simulation.init_cache()

Initialize the cache from the options.

Simulation.init_measurements()

Initialize and prepare measurements.

Simulation.init_model()

Initialize a model from the model parameters.

Simulation.init_state()

Initialize a tensor network psi.

Simulation.make_measurements()

Perform measurements and merge the results into self.results['measurements'].

Simulation.perform_measurements()

Emits the measurement_event to call measurement functions and collect results.

Simulation.prepare_results_for_save()

Bring the results into a state suitable for saving.

Simulation.resume_run()

Resume a simulation that was initialized from a checkpoint.

Simulation.resume_run_algorithm()

Resume running the algorithm.

Simulation.run()

Run the whole simulation.

Simulation.run_algorithm()

Run the algorithm.

Simulation.run_post_processing()

Apply (several) post-processing steps.

Simulation.save_at_checkpoint(alg_engine)

Save the intermediate results at the checkpoint of an algorithm.

Simulation.save_results([results])

Save the results to an output file.

Simulation.walltime()

Wall time evolved since initialization of the simulation class.

Class Attributes and Properties

Simulation.default_algorithm

name of the default algorithm engine class

Simulation.default_measurements

tuples as for Simulation.connect_measurements that get added if the Simulation.use_default_measurements is True.

Simulation.default_post_processing

tuples as for Simulation.run_post_processing, same structure as for measurements

Simulation.logger

class attribute.

class tenpy.simulations.simulation.Simulation(options, *, setup_logging=True, resume_data=None)[source]

Bases: object

Base class for simulations.

The preferred way to run simulations is in a with statement, which allows us to redirect error messages to the log files, timely warn about unused parameters and to properly close any open files. In other words, use the simulation class like this:

with Simulation(options, ...) as sim:
    results = sim.run()

The wrappers run_simulation() and run_seq_simulations() do that.

Parameters:
  • options (dict-like) – The simulation parameters as outlined below. Ideally, these options should be enough to fully specify all parameters of a simulation to ensure reproducibility.

  • setup_logging (bool) – Whether to call setup_logging() at the beginning of initialization.

  • resume_data (None | dict) – Ignored if None. If a dictionary, it should contain the data for resuming the simulation, results['resume_data'] (see results). Note that the dict is cleared after readout to allow freeing memory.

Options

config Simulation
option summary

algorithm_class in Simulation.init_algorithm

Class or name of a subclass of :class:`~tenpy.algorithms.algorithm.Algorith [...]

algorithm_params in Simulation.init_algorithm

Dictionary with parameters for the algorithm; see the documentation of the [...]

cache_params in GroundStateSearch.init_cache

Dictionary with parameters for the cache, see [...]

cache_threshold_chi in GroundStateSearch.init_cache

If the `algorithm_params.trunc_params.chi_max` in :attr:`options` is smalle [...]

canonicalize_before_measurement in GroundStateSearch.init_measurements

If True, call `psi.canonical_form()` on the state used for measurement.

connect_algorithm_checkpoint in Simulation.init_algorithm

Functions to connect to the :attr:`~tenpy.algorithms.Algorithm.checkpoint` [...]

connect_measurements in GroundStateSearch.init_measurements

Functions to connect to the :attr:`measurement_event`. [...]

directory

If not None (default), switch to that directory at the beginning of the sim [...]

group_sites in GroundStateSearch.group_sites_for_algorithm

How many sites to group. 1 means no grouping.

group_to_NearestNeighborModel in GroundStateSearch.group_sites_for_algorithm

If True, convert the grouped model to a [...]

initial_state_builder_class in GroundStateSearch.init_state

Class or name of a subclass of :class:`~tenpy.networks.mps.InitialStateBuil [...]

initial_state_params in GroundStateSearch.init_state

Dictionary with parameters for building `psi`; see the documentation of the [...]

log_params

Log parameters; see :cfg:config:`log`.

max_errors_before_abort

We safeguard measurements with a try-except block to avoid loosing results [...]

measure_at_algorithm_checkpoints in GroundStateSearch.init_measurements

Defaults to False. If True, make measurements at each algorithm checkpoint. [...]

measure_initial in GroundStateSearch.init_measurements

Whether to perform a measurement on the initial state, i.e., before startin [...]

model_class in GroundStateSearch.init_model

Mandatory. Class or name of a subclass of :class:`~tenpy.models.model.Model`.

model_params in GroundStateSearch.init_model

Dictionary with parameters for the model; see the documentation of the [...]

output_filename in GroundStateSearch.get_output_filename

If ``None`` (default), no output is written to files. [...]

output_filename_params in GroundStateSearch.get_output_filename

Instead of specifying the `output_filename` directly, this dictionary descr [...]

overwrite_output in GroundStateSearch.fix_output_filenames

Only makes a difference if `skip_if_output_exists` is False and the file ex [...]

random_seed

If not ``None``, initialize the (legacy) numpy random generator with the gi [...]

safe_write in GroundStateSearch.fix_output_filenames

If True (default), perform a "safe" overwrite of `output_filename` as descr [...]

save_every_x_seconds in GroundStateSearch.save_at_checkpoint

By default (``None``), this feature is disabled. [...]

save_psi in GroundStateSearch.init_state

Whether the final :attr:`psi` should be included into the output :attr:`res [...]

sequential

Parameters for running simulations sequentially, see :cfg:config:`sequentia [...]

skip_if_output_exists in GroundStateSearch.fix_output_filenames

If True, raise :class:`Skip` if the output file already exists.

use_default_measurements in GroundStateSearch.init_measurements

Each Simulation class defines a list of :attr:`default_measurements` in the [...]

option directory: str

If not None (default), switch to that directory at the beginning of the simulation.

option log_params: dict

Log parameters; see log.

option overwrite_output: bool

Whether an existing file may be overwritten. Otherwise, if the file already exists we try to replace filename.ext with filename_01.ext (and further increasing numbers).

option random_seed: int | None

If not None, initialize the (legacy) numpy random generator with the given seed. Note that models have their own rng with a separate (default) CouplingMPOModel.random_seed in the model_params. If this random_seed is set, we call model_params('random_seed', random_seed + 123456)

option sequential: dict

Parameters for running simulations sequentially, see sequential. Ignored by the simulation itself, but used by run_seq_simulations() and resume_from_checkpoint() to run a whole sequence of simulations passing on the state (and possible more).

option max_errors_before_abort: int | None

We safeguard measurements with a try-except block to avoid loosing results after an expensive simulation. This is the maximum number of errors happening during measurements before we abort the whole simulation. Setting this to None disables raising the error due to failed measurements (also at the end of the simulation).

options

Simulation parameters.

Type:

Config

model

The model to be simulated.

Type:

Model

psi

The tensor network state updated by the algorithm.

engine

The engine of the algorithm.

results

Collection of all the results to be saved in the end. In a standard simulation, it will have the following entries.

simulation_parameters: nested dict

The simulation parameters passed as options.

version_infodict

Information of the used library/code versions and simulation class. See get_version_info().

finished_runbool

Useful to check whether the output file finished or was generated at a checkpoint. This flag is set to True only right at the end of run() (or resume_run()) before saving.

measurementsdict

Data of all the performed measurements.

psi :

The final tensor network state. Only included if Simulation.save_psi is True (default).

resume_datadict

Additional data for resuming the algorithm run. Not part of self.results, but only added in prepare_results_for_save() with the most up-to-date resume_data from get_resume_data(). Only included if Simulation.save_resume_data is True. Note that this contains another (reference or even copy of) psi.

Type:

dict

cache

Cache that can be used by algorithms.

Type:

DictCache

measurement_event

An event that gets emitted each time when measurements should be performed. The callback functions should take psi, the simulation class itself, and a dictionary results as arguments. They should directly write the results into that dictionary.

Type:

EventHandler

output_filename

Filename for output.

Type:

str

_backup_filename

When writing a file a second time, instead of simply overwriting it, move it to there. In that way, we still have a non-corrupt version if something fails during saving.

Type:

str

errors_during_run

List holding errors that occurred during runtime, i.e. during measurements or post-processing. This is read out (and possibly raises an Exception) at the end of run().

Type:

list of tuples

_init_walltime

Walltime at initialization of the simulation class. Used as reference point in walltime().

Type:

float

_last_save

Time of the last call to save_results(), initialized to _init_walltime.

Type:

float

loaded_from_checkpoint

True when the simulation is loaded with from_saved_checkpoint().

Type:

bool

grouped

By how many sites we grouped in group_sites_for_algorithm().

Type:

int

model_ungrouped

Only set if grouped > 1. In that case, model is the modified/grouped model, and model_ungrouped is the original ungrouped model.

final_processing

Flag that indicates that we’re in the final processing and want to avoid raising errors before saving results.

Type:

bool

received_signal_sigint

Flag to indicate that the user pressed ctrl-c and want’s the process to terminate. See handle_ctrl_c_sigint() for details.

Type:

bool

default_algorithm = 'TwoSiteDMRGEngine'

name of the default algorithm engine class

default_measurements = [('tenpy.simulations.measurement', 'm_measurement_index', {}, 1), ('tenpy.simulations.measurement', 'm_bond_dimension'), ('tenpy.simulations.measurement', 'm_entropy')]

tuples as for Simulation.connect_measurements that get added if the Simulation.use_default_measurements is True.

default_post_processing = []

tuples as for Simulation.run_post_processing, same structure as for measurements

logger = <Logger tenpy.simulations.simulation.Simulation (WARNING)>

class attribute.

Type:

logger

Type:

An instance of a logger; see Logging and terminal output. NB

handle_abort_signal(signum, frame)[source]

Handle a SIGINT signal, usually caused by a CTRL-C press.

When the user presses Ctrl-C the first time, we just print a message to stderr that we received the signal and set the flag received_signal_sigint. This allows the simulation to “exit gracefully”: it will continue until the next algorithm checkpoint, where save_at_checkpoint() checks for this flag, and if set, saves the results obtained so far and only then raises KeyboardInterrupt.

When Ctrl-C is presssed a second time, we immediately raise a KeyboardInterrupt.

This feature is especially handy to gracefully interrupt long-running simulations. When running in an HPC cluster linux environment, you can usually still send the SIGINT signal, e.g. with SLURM you can call scancel --signal=INT 1234 for the job ide 1234.

estimate_RAM()[source]

Estimates the RAM usage for the simulation, without running it.

Returns:

RAM – The expected RAM usage in kB.

Return type:

int

run()[source]

Run the whole simulation.

Returns:

results – The results as returned by prepare_results_for_save().

Return type:

dict

classmethod from_saved_checkpoint(filename=None, checkpoint_results=None, **kwargs)[source]

Re-initialize a given simulation class from checkpoint results.

You should probably call resume_run() after successful initialization.

Instead of calling this directly, consider using resume_from_checkpoint().

Parameters:
  • filename (None | str) – The filename of the checkpoint to be loaded. You can either specify the filename or the checkpoint_results.

  • checkpoint_results (None | dict) – Alternatively to filename the results of the simulation so far, i.e. directly the data dictionary saved at a simulation checkpoint.

  • **kwargs – Further keyword arguments given to the Simulation.__init__.

resume_run()[source]

Resume a simulation that was initialized from a checkpoint.

Returns:

results – The results as returned by prepare_results_for_save().

Return type:

dict

init_cache()[source]

Initialize the cache from the options.

This method is only called automatically when the simulation is used in a with ... statement. This is the case if you use run_simulation(), etc.

Options

option Simulation.cache_threshold_chi: int

If the algorithm_params.trunc_params.chi_max in options is smaller than this threshold, do not initialize a (non-trivial) cache.

option Simulation.cache_params: dict

Dictionary with parameters for the cache, see open().

init_model()[source]

Initialize a model from the model parameters.

Skips initialization if model is already set.

Options

option Simulation.model_class: str | class

Mandatory. Class or name of a subclass of Model.

option Simulation.model_params: dict

Dictionary with parameters for the model; see the documentation of the corresponding model_class.

init_state()[source]

Initialize a tensor network psi.

Skips initialization if psi is already set.

Options

option Simulation.initial_state_builder_class: str | class

Class or name of a subclass of InitialStateBuilder. Used to initialize psi according to the initial_state_params.

option Simulation.initial_state_params: dict

Dictionary with parameters for building psi; see the documentation of the initial_state_builder_class, e.g. InitialStateBuilder.

option Simulation.save_psi: bool

Whether the final psi should be included into the output results.

group_sites_for_algorithm()[source]

Coarse-grain the model and state for the algorithm.

Options

option Simulation.group_sites: int

How many sites to group. 1 means no grouping.

option Simulation.group_to_NearestNeighborModel: bool

If True, convert the grouped model to a NearestNeighborModel. Use this if you want to run TEBD with a model that was originally next-nearest neighbor.

group_split()[source]

Split sites of psi that were grouped in group_sites_for_algorithm().

init_algorithm(**kwargs)[source]

Initialize the algorithm.

If results has ‘resume_data’, it is read out, used for initialization and removed from the results.

Parameters:

**kwargs – Extra keyword arguments passed on to the Algorithm.__init__(), for example the resume_data when calling resume_run.

Options

option Simulation.algorithm_class: str | class

Class or name of a subclass of Algorithm. The engine of the algorithm to be run.

option Simulation.algorithm_params: dict

Dictionary with parameters for the algorithm; see the documentation of the algorithm_class.

option Simulation.connect_algorithm_checkpoint: list of tuple

Functions to connect to the checkpoint event of the algorithm. Each tuple can be of length 2 to 4, with entries (module, function, kwargs, priority), the last two optionally. The mandatory module and function specify a callback measurement function. kwargs can specify extra keyword-arguments for the function, priority allows to tune the order in which the measurement functions get called. See connect_by_name() for more details.

init_measurements()[source]

Initialize and prepare measurements.

Options

option Simulation.connect_measurements: list of tuple

Functions to connect to the measurement_event. Each tuple can be of length 2 to 4, with entries (module, function, kwargs, priority), the last two optionally. The mandatory module and function specify a callback measurement function. kwargs can specify extra keyword-arguments for the function, priority allows to tune the order in which the measurement functions get called. See connect_by_name() for more details.

option Simulation.use_default_measurements: bool

Each Simulation class defines a list of default_measurements in the same format as Simulation.connect_measurements. This flag allows to explicitly disable them.

option Simulation.measure_initial: bool

Whether to perform a measurement on the initial state, i.e., before starting the algorithm run.

option Simulation.measure_at_algorithm_checkpoints: bool

Defaults to False. If True, make measurements at each algorithm checkpoint. This can be useful to study e.g. the DMRG convergence with the number of sweeps. Note that (depending on the algorithm) psi might not be in canonical form during the algorithm run. In that case, you might need to also enable the canonicalize_before_measurement option to get correct e.g. correct long-range correlation functions. (On the other hand, local onsite expectation values are likely fine without the explicit canonical_form() call.)

option Simulation.canonicalize_before_measurement: bool

If True, call psi.canonical_form() on the state used for measurement.

run_algorithm()[source]

Run the algorithm.

Calls self.engine.run().

resume_run_algorithm()[source]

Resume running the algorithm.

Calls self.engine.resume_run().

make_measurements()[source]

Perform measurements and merge the results into self.results['measurements'].

perform_measurements()[source]

Emits the measurement_event to call measurement functions and collect results.

Returns:

results – The results from calling the measurement functions.

Return type:

dict

get_measurement_psi_model(psi, model)[source]

Get psi for measurements.

Sometimes, the psi we want to use for measurements is different from the one the algorithm actually acts on. Here, we split sites, if they were grouped in group_sites_for_algorithm().

Parameters:
  • psi – Tensor network; initially just self.psi. The method should make a copy before modification.

  • model – Model matching psi (in terms of indexing, MPS order, grouped sites, …) Initially just self.model.

Returns:

  • psi – The psi suitable as argument for generic measurement functions.

  • model – Model matching psi (in terms of indexing, MPS order, grouped sites, …)

final_measurements()[source]

Perform a last set of measurements.

run_post_processing()[source]

Apply (several) post-processing steps.

post_processinglist of tuple

Functions to perform post-processing with the DataLoader. This uses a similar syntax to the attr:connect_measurements in meth:init_measurements. Each tuple can be of length 2 to 3, with entries (module, function, kwargs). The kwargs can contain a results_key under which the results (unless None is returned) are saved. All other kwargs are passed on to the function.

Note

All post-processing functions should follow the syntax: def pp_function(DL, *, kwarg1, kwarg_2=default_2): where DL is an instance of the DataLoader, kwarg_1 is a necessary keyword argument (no default value), while kwarg_2 is an optional keyword argument (with default value)

get_version_info()[source]

Try to save version info which is necessary to allow reproducibility.

get_output_filename()[source]

Read out the output_filename from the options.

You can easily overwrite this method in subclasses to customize the outputfilename depending on the options passed to the simulations.

Options

option Simulation.output_filename: path_like | None

If None (default), no output is written to files. If a string, this filename is used for output (up to modifications by fix_output_filenames() to avoid overwriting previous results).

option Simulation.output_filename_params: dict

Instead of specifying the output_filename directly, this dictionary describes the parameters that should be included into it. Entries of the dictionary are keyword arguments to output_filename_from_dict() with the simulation parameters (Simulation, or equivalently options) as options.

Returns:

output_filename – Filename for output; None disables any writing to files. Relative to Simulation.directory, if specified. The file ending determines the output format.

Return type:

str | None

fix_output_filenames()[source]

Determine the output filenames.

This function determines the output_filename and writes a one-line text into that file to indicate that we’re running a simulation generating it. Further, _backup_filename is determined.

Options

option Simulation.skip_if_output_exists: bool

If True, raise Skip if the output file already exists.

option Simulation.overwrite_output: bool

Only makes a difference if skip_if_output_exists is False and the file exists. In that case, with overwrite_output, just save everything under that name again, or with overwrite_output`=False, replace ``filename.ext` with filename_01.ext (and further increasing numbers) until we get a filename that doesn’t exist yet.

option Simulation.safe_write: bool

If True (default), perform a “safe” overwrite of output_filename as described in save_results().

get_backup_filename(output_filename)[source]

Extract the name used for backups of output_filename.

Parameters:

output_filename (pathlib.Path) – The filename where data is saved.

Returns:

backup_filename – The filename where to keep a backup while writing files to avoid.

Return type:

pathlib.Path

save_results(results=None)[source]

Save the results to an output file.

Performs a “safe” overwrite of output_filename by first moving the old file to _backup_filename, then writing the new file, and finally removing the backup.

Parameters:

results (dict | None) – The results to be saved. If not specified, call prepare_results_for_save() to allow last-minute adjustments to the saved results.

prepare_results_for_save()[source]

Bring the results into a state suitable for saving.

For example, this can be used to convert lists to numpy arrays, to add more meta-data, or to clean up unnecessarily large entries.

Options

Cfg:configoptions ::

Simulation

save_resume_databool

If True, include data returned by get_resume_data() into the output as resume_data.

Returns:

results – A copy of results containing everything to be saved. Measurement results are converted into a numpy array (if possible).

Return type:

dict

get_resume_data() dict[source]

Get resume data for a Simulation.

Return data from get_resume_data() in base Simulation. Subclasses should override this with resume_data = super().get_resume_data(), s.t. Simulation specific data can easily be returned for resume_data.

save_at_checkpoint(alg_engine)[source]

Save the intermediate results at the checkpoint of an algorithm.

Parameters:

alg_engine (Algorithm) – The engine of the algorithm. Not used in this function, mostly there for compatibility with the checkpoint event.

Options

option Simulation.save_every_x_seconds: float | None

By default (None), this feature is disabled. If given, save the results obtained so far at each checkpoint when at least save_every_x_seconds seconds evolved since the last save (or since starting the algorithm). To avoid unnecessary, slow disk input/output, the value will be increased if saving takes longer than 10% of save_every_x_seconds. Use 0. to force saving at each checkpoint.

walltime()[source]

Wall time evolved since initialization of the simulation class.

Utility measurement method. To measure it, add the following entry to the Simulation.connect_measurements option:

- - simulation_method
  - wrap walltime
Returns:

seconds – Elapsed (wall clock) time in seconds since the initialization of the simulation.

Return type:

float