Source code for biogeme.catalog.catalog_iterator

"""Iterator on arithmetic expressions in a catalog

Michel Bierlaire
Thu Apr 17 2025, 08:30:58
"""

from __future__ import annotations

from biogeme.exceptions import BiogemeError

from .central_controller import CentralController
from .configuration import Configuration


[docs] class SelectedConfigurationsIterator: """A multiple expression is an expression that contains Catalog. This iterator loops on pre-specified configurations """ def __init__( self, the_central_controller: CentralController, selected_configurations: set[Configuration] | None = None, ): """Ctor. :param the_central_controller: expression containing Catalogs :param selected_configurations: selected configurations to iterate on. If None, all configurations are considered. """ self.the_central_controller = the_central_controller self.configurations = ( selected_configurations or the_central_controller.all_configurations ) if not isinstance(self.configurations, set): error_msg = f'The selected configurations must be a set, and not an object of type {type(self.configurations)}' raise BiogemeError(error_msg) self.set_iterator = iter(self.configurations) self.current_configuration = next(self.set_iterator) self.the_central_controller.set_configuration(self.current_configuration) self.first = True self.number = 0 def __iter__(self) -> SelectedConfigurationsIterator: return self def __next__(self) -> Configuration: self.number += 1 if self.first: self.first = False return self.current_configuration self.current_configuration = next(self.set_iterator) self.the_central_controller.set_configuration(self.current_configuration) return self.current_configuration