44
55from baybe .objectives .single import SingleTargetObjective
66from baybe .parameters .numerical import NumericalDiscreteParameter
7- from baybe .targets .enum import TargetMode , TargetTransformation
7+ from baybe .targets .enum import TargetMode
88from baybe .targets .numerical import NumericalTarget
99from baybe .utils .metadata import MeasurableMetadata , Metadata
1010
@@ -65,32 +65,30 @@ def test_parameter_metadata_always_non_none(self):
6565class TestTargetMetadataIntegration :
6666 """Tests for metadata integration with Target class."""
6767
68+ def _create_target (self , ** kwargs ) -> NumericalTarget :
69+ """Create a standard NumericalTarget for testing."""
70+ return NumericalTarget (
71+ name = "yield" ,
72+ mode = TargetMode .MAX ,
73+ transformation = None ,
74+ ** kwargs ,
75+ )
76+
6877 @pytest .mark .parametrize ("as_dict" , [True , False ])
6978 def test_target_with_metadata (self , as_dict : bool ):
7079 """Targets accept, ingest, and surface metadata."""
7180 meta = MeasurableMetadata (
7281 description = "test target" , unit = "kg" , misc = {"priority" : "high" }
7382 )
74- target = NumericalTarget (
75- name = "yield" ,
76- bounds = (0 , 100 ),
77- mode = TargetMode .MAX ,
78- transformation = TargetTransformation .LINEAR ,
79- metadata = meta .to_dict () if as_dict else meta ,
80- )
83+ target = self ._create_target (metadata = meta .to_dict () if as_dict else meta )
8184 assert target .description == "test target"
8285 assert target .unit == "kg"
8386 assert target .metadata is not None
8487 assert target .metadata .misc == {"priority" : "high" }
8588
8689 def test_target_without_metadata (self ):
8790 """Targets without metadata have ``None`` properties."""
88- target = NumericalTarget (
89- name = "yield" ,
90- bounds = (0 , 100 ),
91- mode = TargetMode .MAX ,
92- transformation = TargetTransformation .LINEAR ,
93- )
91+ target = self ._create_target ()
9492 assert target .metadata is not None
9593 assert target .metadata .is_empty
9694 assert target .description is None
@@ -99,37 +97,22 @@ def test_target_without_metadata(self):
9997 def test_target_metadata_always_non_none (self ):
10098 """Test that target metadata is always non-None."""
10199 # Test target without explicit metadata
102- target1 = NumericalTarget (
103- name = "yield" ,
104- bounds = (0 , 100 ),
105- mode = TargetMode .MAX ,
106- transformation = TargetTransformation .LINEAR ,
107- )
100+ target1 = self ._create_target ()
108101 assert target1 .metadata is not None
109102 assert target1 .metadata .is_empty
110103 assert target1 .description is None
111104 assert target1 .unit is None
112105
113106 # Test target with empty dict metadata
114- target2 = NumericalTarget (
115- name = "yield" ,
116- bounds = (0 , 100 ),
117- mode = TargetMode .MAX ,
118- transformation = TargetTransformation .LINEAR ,
119- metadata = {},
120- )
107+ target2 = self ._create_target (metadata = {})
121108 assert target2 .metadata is not None
122109 assert target2 .metadata .is_empty
123110 assert target2 .description is None
124111 assert target2 .unit is None
125112
126113 # Test target with actual metadata
127- target3 = NumericalTarget (
128- name = "yield" ,
129- bounds = (0 , 100 ),
130- mode = TargetMode .MAX ,
131- transformation = TargetTransformation .LINEAR ,
132- metadata = {"description" : "Chemical yield" , "unit" : "%" },
114+ target3 = self ._create_target (
115+ metadata = {"description" : "Chemical yield" , "unit" : "%" }
133116 )
134117 assert target3 .metadata is not None
135118 assert not target3 .metadata .is_empty
@@ -138,12 +121,8 @@ def test_target_metadata_always_non_none(self):
138121
139122 def test_target_metadata_serialization (self ):
140123 """Target metadata survives serialization roundtrip."""
141- target = NumericalTarget (
142- name = "yield" ,
143- bounds = (0 , 100 ),
144- mode = TargetMode .MAX ,
145- transformation = TargetTransformation .LINEAR ,
146- metadata = {"description" : "Chemical yield" , "unit" : "%" , "method" : "HPLC" },
124+ target = self ._create_target (
125+ metadata = {"description" : "Chemical yield" , "unit" : "%" , "method" : "HPLC" }
147126 )
148127
149128 # Serialize and deserialize
@@ -160,6 +139,15 @@ def test_target_metadata_serialization(self):
160139class TestObjectiveMetadataIntegration :
161140 """Tests for metadata integration with Objective class."""
162141
142+ def _create_target (self , ** kwargs ) -> NumericalTarget :
143+ """Create a standard NumericalTarget for testing."""
144+ return NumericalTarget (
145+ name = "yield" ,
146+ mode = TargetMode .MAX ,
147+ transformation = None ,
148+ ** kwargs ,
149+ )
150+
163151 @pytest .mark .parametrize ("as_dict" , [True , False ])
164152 def test_objective_with_metadata (self , as_dict : bool ):
165153 """Objectives accept, ingest, and surface metadata."""
@@ -168,12 +156,7 @@ def test_objective_with_metadata(self, as_dict: bool):
168156 )
169157
170158 # Create a target first
171- target = NumericalTarget (
172- name = "yield" ,
173- bounds = (0 , 100 ),
174- mode = TargetMode .MAX ,
175- transformation = TargetTransformation .LINEAR ,
176- )
159+ target = self ._create_target ()
177160
178161 objective = SingleTargetObjective (
179162 target = target ,
@@ -185,12 +168,7 @@ def test_objective_with_metadata(self, as_dict: bool):
185168
186169 def test_objective_without_metadata (self ):
187170 """Objectives without metadata have ``None`` properties."""
188- target = NumericalTarget (
189- name = "yield" ,
190- bounds = (0 , 100 ),
191- mode = TargetMode .MAX ,
192- transformation = TargetTransformation .LINEAR ,
193- )
171+ target = self ._create_target ()
194172
195173 objective = SingleTargetObjective (target = target )
196174 assert objective .metadata is not None
@@ -199,12 +177,7 @@ def test_objective_without_metadata(self):
199177
200178 def test_objective_metadata_serialization (self ):
201179 """Objective metadata survives serialization roundtrip."""
202- target = NumericalTarget (
203- name = "yield" ,
204- bounds = (0 , 100 ),
205- mode = TargetMode .MAX ,
206- transformation = TargetTransformation .LINEAR ,
207- )
180+ target = self ._create_target ()
208181
209182 objective = SingleTargetObjective (
210183 target = target ,
@@ -222,12 +195,8 @@ def test_objective_metadata_serialization(self):
222195
223196 def test_combined_target_objective_metadata (self ):
224197 """Both target and objective can have independent metadata."""
225- target = NumericalTarget (
226- name = "yield" ,
227- bounds = (0 , 100 ),
228- mode = TargetMode .MAX ,
229- transformation = TargetTransformation .LINEAR ,
230- metadata = {"description" : "Chemical yield" , "unit" : "%" },
198+ target = self ._create_target (
199+ metadata = {"description" : "Chemical yield" , "unit" : "%" }
231200 )
232201
233202 objective = SingleTargetObjective (
@@ -250,12 +219,7 @@ def test_combined_target_objective_metadata(self):
250219
251220 def test_objective_metadata_always_non_none (self ):
252221 """Test that objective metadata is always non-None."""
253- target = NumericalTarget (
254- name = "yield" ,
255- bounds = (0 , 100 ),
256- mode = TargetMode .MAX ,
257- transformation = TargetTransformation .LINEAR ,
258- )
222+ target = self ._create_target ()
259223
260224 # Test objective without explicit metadata
261225 objective1 = SingleTargetObjective (target = target )
0 commit comments