Source code for cgexplore._internal.systems_optimisation.calculators

# Distributed under the terms of the MIT License.

"""Optimisation Generation module."""

import logging
import pathlib
from collections import abc
from dataclasses import dataclass, field

from .inputs import Chromosome, ChromosomeGenerator

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s | %(levelname)s | %(message)s",
)
logger = logging.getLogger(__name__)


[docs] @dataclass(frozen=True, slots=True) class StructureCalculator: structure_function: abc.Callable structure_output: pathlib.Path calculation_output: pathlib.Path database_path: pathlib.Path options: dict = field(default_factory=dict)
[docs] def calculate(self, chromosome: Chromosome) -> None: """Run the production and analyse a chromosome.""" self.structure_function( chromosome=chromosome, database_path=self.database_path, calculation_output=self.calculation_output, structure_output=self.structure_output, options=self.options, )
[docs] @dataclass(frozen=True, slots=True) class FitnessCalculator: fitness_function: abc.Callable chromosome_generator: ChromosomeGenerator structure_output: pathlib.Path calculation_output: pathlib.Path database_path: pathlib.Path options: dict = field(default_factory=dict)
[docs] def calculate(self, chromosome: Chromosome) -> float: """Calculate the fitness of a chromosome.""" return self.fitness_function( chromosome=chromosome, chromosome_generator=self.chromosome_generator, database_path=self.database_path, calculation_output=self.calculation_output, structure_output=self.structure_output, options=self.options, )