def test_product_serialization(valid_product_design_space_data):
    """Ensure that a serialized ProductDesignSpace looks sane."""
    design_space = ProductDesignSpace.build(valid_product_design_space_data)
    serialized = design_space.dump()
    serialized['id'] = valid_product_design_space_data['id']
    assert serialized == valid_serialization_output(
        valid_product_design_space_data)
def test_simple_product_deserialization(valid_product_data):
    """Ensure that a deserialized ProductDesignSpace looks sane."""
    design_space: ProductDesignSpace = ProductDesignSpace.build(
        valid_product_data)
    assert design_space.name == 'my design space'
    assert design_space.description == 'does some things'
    assert type(design_space.dimensions[0]) == ContinuousDimension
    assert design_space.dimensions[0].lower_bound == 6.0
    assert type(design_space.dimensions[1]) == EnumeratedDimension
    assert design_space.dimensions[1].values == ['red']
def product_design_space() -> ProductDesignSpace:
    """Build a ProductDesignSpace for testing."""
    alpha = RealDescriptor('alpha', 0, 100)
    beta = RealDescriptor('beta', 0, 100)
    gamma = CategoricalDescriptor('gamma', ['a', 'b', 'c'])
    dimensions = [
        ContinuousDimension(alpha, 0, 10),
        ContinuousDimension(beta, 0, 10),
        EnumeratedDimension(gamma, ['a', 'c'])
    ]
    return ProductDesignSpace('my design space', 'does some things',
                              dimensions)
示例#4
0
def test_old_product_serialization(old_valid_product_design_space_data):
    """Ensure that the old version of the product design space can be (de)serialized.
    The previous version had no `subspaces` field and had type `Univariate`.
    Some on-platform assets are saved this way, and should be converted seamlessly
    into ProductDesignSpaces.
    """
    design_space = ProductDesignSpace.build(
        old_valid_product_design_space_data)
    assert design_space.subspaces == []
    assert design_space.typ == 'ProductDesignSpace'
    serialized = design_space.dump()
    serialized['id'] = old_valid_product_design_space_data['id']
    serialized['config']['type'] = 'Univariate'
    del serialized['config']['subspaces']
    assert serialized == valid_serialization_output(
        old_valid_product_design_space_data)
示例#5
0
def test_product_serialization(valid_product_design_space_data):
    """Ensure that a serialized ProductDesignSpace looks sane."""
    original_data = deepcopy(valid_product_design_space_data)
    design_space = ProductDesignSpace.build(valid_product_design_space_data)
    serialized = design_space.dump()
    serialized['id'] = valid_product_design_space_data['id']
    assert serialized['config']['subspaces'][0] == original_data['config'][
        'subspaces'][0]['id']
    assert serialized['config']['subspaces'][1] == original_data['config'][
        'subspaces'][1]['instance']

    # Replace one of the subspaces with its uid, and check that the serialized result is the same.
    design_space.subspaces[0] = design_space.subspaces[0].uid
    serialized_with_uid = design_space.dump()
    serialized_with_uid['id'] = valid_product_design_space_data['id']
    assert serialized_with_uid == serialized
import pytest

from citrine.informatics.constraints import ScalarRangeConstraint, CategoricalConstraint
from citrine.informatics.design_spaces import ProductDesignSpace, EnumeratedDesignSpace
from citrine.informatics.objectives import ScalarMaxObjective, ScalarMinObjective
from citrine.informatics.processors import GridProcessor, EnumeratedProcessor
from citrine.informatics.scores import LIScore, EIScore
from citrine.informatics.reports import ModelSummary, FeatureImportanceReport

informatics_string_data = [
    (ScalarRangeConstraint('z'), "<ScalarRangeConstraint 'z'>"),
    (CategoricalConstraint('x', []), "<CategoricalConstraint 'x'>"),
    (ProductDesignSpace('my design space', 'does some things',
                        []), "<ProductDesignSpace 'my design space'>"),
    (EnumeratedDesignSpace('enumerated', 'desc', [],
                           []), "<EnumeratedDesignSpace 'enumerated'>"),
    (ScalarMaxObjective('z', 1.0, 10.0), "<ScalarMaxObjective 'z'>"),
    (ScalarMinObjective('z', 1.0, 10.0), "<ScalarMinObjective 'z'>"),
    (GridProcessor('my thing', 'does a thing',
                   dict(x=1)), "<GridProcessor 'my thing'>"),
    (EnumeratedProcessor('my enumerated thing', 'enumerates',
                         10), "<EnumeratedProcessor 'my enumerated thing'>"),
    (LIScore("LI(z)", "score for z", [], []), "<LIScore 'LI(z)'>"),
    (EIScore("EI(x)", "score for x", [], [], []), "<EIScore 'EI(x)'>"),
    (FeatureImportanceReport("reflectivity",
                             {}), "<FeatureImportanceReport 'reflectivity'>"),
    (ModelSummary("my model", "ML Model", [], [], {}, [],
                  "predictor name"), "<ModelSummary 'my model'>"),
]

informatics_string_data = [
    (IngredientCountConstraint(
        formulation_descriptor=FormulationDescriptor('x'), min=0,
        max=1), "<IngredientCountConstraint 'x'>"),
    (IngredientFractionConstraint(
        formulation_descriptor=FormulationDescriptor('x'),
        ingredient='y',
        min=0,
        max=1), "<IngredientFractionConstraint 'x'::'y'>"),
    (LabelFractionConstraint(formulation_descriptor=FormulationDescriptor('x'),
                             label='y',
                             min=0,
                             max=1), "<LabelFractionConstraint 'x'::'y'>"),
    (ScalarRangeConstraint('z'), "<ScalarRangeConstraint 'z'>"),
    (CategoricalConstraint('x', []), "<CategoricalConstraint 'x'>"),
    (ProductDesignSpace(name='my design space',
                        description='does some things'),
     "<ProductDesignSpace 'my design space'>"),
    (EnumeratedDesignSpace('enumerated', 'desc', [],
                           []), "<EnumeratedDesignSpace 'enumerated'>"),
    (FormulationDesignSpace(name='formulation',
                            description='desc',
                            formulation_descriptor=FormulationDescriptor('x'),
                            ingredients={'y'},
                            constraints=set(),
                            labels={}),
     "<FormulationDesignSpace 'formulation'>"),
    (ScalarMaxObjective('z'), "<ScalarMaxObjective 'z'>"),
    (ScalarMinObjective('z'), "<ScalarMinObjective 'z'>"),
    (GridProcessor('my thing', 'does a thing',
                   dict(x=1)), "<GridProcessor 'my thing'>"),
    (EnumeratedProcessor('my enumerated thing', 'enumerates',