Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/citrine/__version__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "3.4.6"
__version__ = "3.4.7"
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from typing import List, Mapping, Any
from typing import List, Mapping, Union
from warnings import warn

from citrine._rest.engine_resource import EngineResource
from citrine._serialization import properties
Expand Down Expand Up @@ -29,8 +30,11 @@ class EnumeratedDesignSpace(EngineResource['EnumeratedDesignSpace'], DesignSpace
"""

descriptors = properties.List(properties.Object(Descriptor), 'data.instance.descriptors')
data = properties.List(properties.Mapping(properties.String, properties.Raw),
'data.instance.data')
_data = properties.List(properties.Mapping(properties.String,
properties.Union([properties.String(),
properties.Integer(),
properties.Float()])),
'data.instance.data')

typ = properties.String('data.instance.type', default='EnumeratedDesignSpace',
deserializable=False)
Expand All @@ -40,11 +44,26 @@ def __init__(self,
*,
description: str,
descriptors: List[Descriptor],
data: List[Mapping[str, Any]]):
data: List[Mapping[str, Union[int, float, str]]]):
self.name: str = name
self.description: str = description
self.descriptors: List[Descriptor] = descriptors
self.data: List[Mapping[str, Any]] = data
self.data: List[Mapping[str, Union[int, float, str]]] = data

def __str__(self):
return '<EnumeratedDesignSpace {!r}>'.format(self.name)

@property
def data(self) -> List[Mapping[str, Union[int, float, str]]]:
"""List of dicts corresponding to candidates in the design space."""
return self._data

@data.setter
def data(self, value: List[Mapping[str, Union[int, float, str]]]):
for item in value:
for el in item.values():
if isinstance(el, (int, float)):
warn("Providing numeric data values is deprecated as of 3.4.7, and will be "
"dropped in 4.0.0. Please use strings instead.",
DeprecationWarning)
self._data = value
4 changes: 2 additions & 2 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,8 +149,8 @@ def valid_enumerated_design_space_data():
)
],
data=[
dict(x=1, color='red', formula='C44H54Si2'),
dict(x=2.0, color='green', formula='V2O3')
dict(x='1', color='red', formula='C44H54Si2'),
dict(x='2.0', color='green', formula='V2O3')
]
)
),
Expand Down
4 changes: 2 additions & 2 deletions tests/informatics/test_design_spaces.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ def enumerated_design_space() -> EnumeratedDesignSpace:
"""Build an EnumeratedDesignSpace for testing."""
x = RealDescriptor('x', lower_bound=0.0, upper_bound=1.0, units='')
color = CategoricalDescriptor('color', categories=['r', 'g', 'b'])
data = [dict(x=0, color='r'), dict(x=1.0, color='b')]
data = [dict(x='0', color='r'), dict(x='1.0', color='b')]
return EnumeratedDesignSpace('enumerated', description='desc', descriptors=[x, color], data=data)


Expand Down Expand Up @@ -105,7 +105,7 @@ def test_enumerated_initialization(enumerated_design_space):
assert len(enumerated_design_space.descriptors) == 2
assert enumerated_design_space.descriptors[0].key == 'x'
assert enumerated_design_space.descriptors[1].key == 'color'
assert enumerated_design_space.data == [{'x': 0.0, 'color': 'r'}, {'x': 1.0, 'color': 'b'}]
assert enumerated_design_space.data == [{'x': '0', 'color': 'r'}, {'x': '1.0', 'color': 'b'}]


def test_hierarchical_initialization(hierarchical_design_space):
Expand Down
4 changes: 2 additions & 2 deletions tests/resources/test_design_space.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,14 +138,14 @@ def test_design_space_limits():
"foo",
description="bar",
descriptors=[RealDescriptor("R-{}".format(i), lower_bound=0, upper_bound=1, units="") for i in range(128)],
data=[{"R-{}".format(i): random.random() for i in range(128)} for _ in range(2001)]
data=[{f"R-{i}": str(random.random()) for i in range(128)} for _ in range(2001)]
)

just_right = EnumeratedDesignSpace(
"foo",
description="bar",
descriptors=[RealDescriptor("R-{}".format(i), lower_bound=0, upper_bound=1, units="") for i in range(128)],
data=[{"R-{}".format(i): random.random() for i in range(128)} for _ in range(2000)]
data=[{f"R-{i}": str(random.random()) for i in range(128)} for _ in range(2000)]
)

# create mock post response by setting the status
Expand Down
18 changes: 16 additions & 2 deletions tests/serialization/test_design_spaces.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
from copy import copy, deepcopy
from uuid import UUID

import pytest

from . import design_space_serialization_check, valid_serialization_output
from citrine.informatics.constraints import IngredientCountConstraint
from citrine.informatics.descriptors import CategoricalDescriptor, RealDescriptor, ChemicalFormulaDescriptor,\
Expand Down Expand Up @@ -67,8 +69,20 @@ def test_enumerated_deserialization(valid_enumerated_design_space_data):
assert formula.key == 'formula'

assert len(design_space.data) == 2
assert design_space.data[0] == {'x': 1.0, 'color': 'red', 'formula': 'C44H54Si2'}
assert design_space.data[1] == {'x': 2.0, 'color': 'green', 'formula': 'V2O3'}
assert design_space.data[0] == {'x': '1', 'color': 'red', 'formula': 'C44H54Si2'}
assert design_space.data[1] == {'x': '2.0', 'color': 'green', 'formula': 'V2O3'}


def test_enumerated_serialization_data_int_deprecated(valid_enumerated_design_space_data):
design_space = EnumeratedDesignSpace.build(valid_enumerated_design_space_data)
with pytest.deprecated_call():
design_space.data = [dict(x=1, color='red', formula='C44H54Si2')]


def test_enumerated_serialization_data_float_deprecated(valid_enumerated_design_space_data):
design_space = EnumeratedDesignSpace.build(valid_enumerated_design_space_data)
with pytest.deprecated_call():
design_space.data = [dict(x=1.0, color='red', formula='C44H54Si2')]


def test_enumerated_serialization(valid_enumerated_design_space_data):
Expand Down