Source code for cosapp.drivers.lineardoe
import numpy
import itertools
from collections import OrderedDict
from typing import Any, Dict, Optional, Union
from cosapp.drivers.abstractsetofcases import AbstractSetOfCases, System
from cosapp.utils.helpers import check_arg
# TODO
# [ ] Quid for vector variables
[docs]
class LinearDoE(AbstractSetOfCases):
"""
This driver builds a set of linear Doe
Parameters
----------
name : str
Name of the driver
owner : System, optional
:py:class:`~cosapp.systems.system.System` to which driver belongs; defaults to `None`
**kwargs : Any
Keyword arguments will be used to set driver options
"""
__slots__ = ('input_vars',)
def __init__(
self,
name: str,
owner: Optional[System] = None,
**options
) -> None:
"""Initialize driver
Parameters
----------
name: str, optional
Name of the `Driver`.
owner: System, optional
:py:class:`~cosapp.systems.system.System` to which this driver belong; defaults to `None`.
**kwargs:
Additional keywords arguments forwarded to base class.
"""
super().__init__(name, owner, **options)
self.input_vars = OrderedDict()
def _build_cases(self):
cases = list()
for range_ in self.input_vars.values():
cases.append(numpy.linspace(range_["lower"], range_["upper"], range_["count"]))
self.cases = list(itertools.product(*cases))
def _precase(self, case_idx, case):
"""Hook to be called before running each case."""
super()._precase(case_idx, case)
for variable, value in zip(self.input_vars, case):
self.owner[variable] = value