Source code for scale.olm.generate.states

from pydantic import BaseModel
from typing import List, Literal
import scale.olm.internal as internal

__all__ = ["full_hypercube"]

_TYPE_FULL_HYPERCUBE = "scale.olm.generate.states:full_hypercube"


def _schema_full_hypercube(with_state: bool = False):
    _schema = internal._infer_schema(_TYPE_FULL_HYPERCUBE, with_state=with_state)
    return _schema


def _test_args_full_hypercube(with_state: bool = False):
    args = {
        "_type": _TYPE_FULL_HYPERCUBE,
        "coolant_density": [0.4, 0.7, 1.0],
        "enrichment": [1.5, 3.5, 4.5],
        "specific_power": [42.0],
    }
    return args


[docs] def full_hypercube(_type: Literal[_TYPE_FULL_HYPERCUBE] = None, **states): """Generate all the permutations assuming a dense N-dimensional space. Args: states list[ list[float] ] """ import numpy as np import scale.olm.internal as internal dims = [] axes = [] for dim in states: axes.append(sorted(states[dim])) internal.logger.debug(f"Processing dimension '{dim}'") dims.append(dim) permutations = [] grid = np.array(np.meshgrid(*axes)).T.reshape(-1, len(dims)) for x in grid: y = dict() for i in range(len(dims)): y[dims[i]] = x[i] internal.logger.debug(f"Generated permutation '{y}'") permutations.append(y) return permutations