Skip to content

Commit 0a81ce9

Browse files
committed
better valuations API
1 parent 7464009 commit 0a81ce9

3 files changed

Lines changed: 31 additions & 10 deletions

File tree

umbi/ats/examples/grid.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,7 @@ def grid(grid: str) -> ExplicitAts:
7171
raise ValueError("The grid must be rectangular (all rows must have the same length).")
7272

7373
# Create ATS
74-
ats = ExplicitAts()
75-
ats.time = TimeType.DISCRETE
76-
ats.num_players = 1
74+
ats = ExplicitAts(time=TimeType.DISCRETE, num_players=1)
7775

7876
cell_to_state = {}
7977
initial_states = set()
@@ -98,11 +96,8 @@ def grid(grid: str) -> ExplicitAts:
9896
ats.add_states(num_states)
9997
ats.set_initial_states(list(initial_states))
10098

101-
if ats.variable_valuations is None:
102-
ats.variable_valuations = EntityClassValuations()
103-
if not ats.variable_valuations.has_state_valuations:
104-
ats.variable_valuations.set_state_valuations(EntityValuations())
105-
state_valuations = ats.variable_valuations.state_valuations
99+
variable_valuations = ats.add_variable_valuations()
100+
state_valuations = variable_valuations.add_state_valuations()
106101
vx = state_valuations.add_variable("x")
107102
vy = state_valuations.add_variable("y")
108103
for state in ats.states:

umbi/ats/explicit_ats.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,12 @@ def get_observation_annotation(self) -> ObservationAnnotation:
443443

444444
### Variable valuations. ###
445445

446+
def add_variable_valuations(self) -> EntityClassValuations:
447+
if self.variable_valuations is not None:
448+
raise ValueError("variable valuations already exist")
449+
self.variable_valuations = EntityClassValuations()
450+
return self.variable_valuations
451+
446452
@property
447453
def has_variable_valuations(self) -> bool:
448454
return self.variable_valuations is not None

umbi/ats/variable_valuations.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,14 @@ def has_values_for(self, entity_class: EntityClass) -> bool:
315315
"""Check if the annotation has values for the given entity class."""
316316
return self.get(entity_class) is not None
317317

318+
def add_valuations_for(self, entity_class: EntityClass) -> EntityValuations:
319+
"""Add a new EntityValuations for the given entity class."""
320+
if self.has_values_for(entity_class):
321+
raise ValueError(f"Annotation already has values for entity class {entity_class}")
322+
valuations = EntityValuations()
323+
self[entity_class] = valuations
324+
return valuations
325+
318326
def get_valuations_for(self, entity_class: EntityClass) -> EntityValuations:
319327
"""
320328
Get the values for the given entity class.
@@ -382,8 +390,20 @@ def observation_valuations(self) -> EntityValuations:
382390
def player_valuations(self) -> EntityValuations:
383391
return self.get_valuations_for(EntityClass.PLAYERS)
384392

385-
def add_state_valuation(self):
386-
return self.get_valuations_for(EntityClass.STATES)
393+
def add_state_valuations(self) -> EntityValuations:
394+
return self.add_valuations_for(EntityClass.STATES)
395+
396+
def add_choice_valuations(self) -> EntityValuations:
397+
return self.add_valuations_for(EntityClass.CHOICES)
398+
399+
def add_branch_valuations(self) -> EntityValuations:
400+
return self.add_valuations_for(EntityClass.BRANCHES)
401+
402+
def add_observation_valuations(self) -> EntityValuations:
403+
return self.add_valuations_for(EntityClass.OBSERVATIONS)
404+
405+
def add_player_valuations(self) -> EntityValuations:
406+
return self.add_valuations_for(EntityClass.PLAYERS)
387407

388408
def set_state_valuations(self, values: EntityValuations):
389409
self.set_valuations_for(EntityClass.STATES, values)

0 commit comments

Comments
 (0)