@@ -16,19 +16,19 @@ class Queen:
16
16
column : int
17
17
row : Annotated [Optional [int ], PlanningVariable ] = field (default = None )
18
18
19
- def getColumnIndex (self ):
19
+ def get_column_index (self ):
20
20
return self .column
21
21
22
- def getRowIndex (self ):
22
+ def get_row_index (self ):
23
23
if self .row is None :
24
24
return - 1
25
25
return self .row
26
26
27
- def getAscendingDiagonalIndex (self ):
28
- return self .getColumnIndex () + self .getRowIndex ()
27
+ def get_ascending_diagonal_index (self ):
28
+ return self .get_column_index () + self .get_row_index ()
29
29
30
- def getDescendingDiagonalIndex (self ):
31
- return self .getColumnIndex () - self .getRowIndex ()
30
+ def get_descending_diagonal_index (self ):
31
+ return self .get_column_index () - self .get_row_index ()
32
32
33
33
def __eq__ (self , other ):
34
34
return self .code == other .code
@@ -48,14 +48,13 @@ class Solution:
48
48
49
49
50
50
def test_constraint_match_disabled_incremental_score_calculator ():
51
- @incremental_score_calculator
52
- class IncrementalScoreCalculator :
51
+ class NQueensIncrementalScoreCalculator (IncrementalScoreCalculator ):
53
52
score : int
54
53
row_index_map : dict
55
54
ascending_diagonal_index_map : dict
56
55
descending_diagonal_index_map : dict
57
56
58
- def resetWorkingSolution (self , working_solution : Solution ):
57
+ def reset_working_solution (self , working_solution : Solution ):
59
58
n = working_solution .n
60
59
self .row_index_map = dict ()
61
60
self .ascending_diagonal_index_map = dict ()
@@ -71,22 +70,22 @@ def resetWorkingSolution(self, working_solution: Solution):
71
70
for queen in working_solution .queen_list :
72
71
self .insert (queen )
73
72
74
- def beforeEntityAdded (self , entity : any ):
73
+ def before_entity_added (self , entity : any ):
75
74
pass
76
75
77
- def afterEntityAdded (self , entity : any ):
76
+ def after_entity_added (self , entity : any ):
78
77
self .insert (entity )
79
78
80
- def beforeVariableChanged (self , entity : any , variableName : str ):
79
+ def before_variable_changed (self , entity : any , variableName : str ):
81
80
self .retract (entity )
82
81
83
- def afterVariableChanged (self , entity : any , variableName : str ):
82
+ def after_variable_changed (self , entity : any , variableName : str ):
84
83
self .insert (entity )
85
84
86
- def beforeEntityRemoved (self , entity : any ):
85
+ def before_entity_removed (self , entity : any ):
87
86
self .retract (entity )
88
87
89
- def afterEntityRemoved (self , entity : any ):
88
+ def after_entity_removed (self , entity : any ):
90
89
pass
91
90
92
91
def insert (self , queen : Queen ):
@@ -95,10 +94,10 @@ def insert(self, queen: Queen):
95
94
row_index_list = self .row_index_map [row_index ]
96
95
self .score -= len (row_index_list )
97
96
row_index_list .append (queen )
98
- ascending_diagonal_index_list = self .ascending_diagonal_index_map [queen .getAscendingDiagonalIndex ()]
97
+ ascending_diagonal_index_list = self .ascending_diagonal_index_map [queen .get_ascending_diagonal_index ()]
99
98
self .score -= len (ascending_diagonal_index_list )
100
99
ascending_diagonal_index_list .append (queen )
101
- descending_diagonal_index_list = self .descending_diagonal_index_map [queen .getDescendingDiagonalIndex ()]
100
+ descending_diagonal_index_list = self .descending_diagonal_index_map [queen .get_descending_diagonal_index ()]
102
101
self .score -= len (descending_diagonal_index_list )
103
102
descending_diagonal_index_list .append (queen )
104
103
@@ -108,21 +107,21 @@ def retract(self, queen: Queen):
108
107
row_index_list = self .row_index_map [row_index ]
109
108
row_index_list .remove (queen )
110
109
self .score += len (row_index_list )
111
- ascending_diagonal_index_list = self .ascending_diagonal_index_map [queen .getAscendingDiagonalIndex ()]
110
+ ascending_diagonal_index_list = self .ascending_diagonal_index_map [queen .get_ascending_diagonal_index ()]
112
111
ascending_diagonal_index_list .remove (queen )
113
112
self .score += len (ascending_diagonal_index_list )
114
- descending_diagonal_index_list = self .descending_diagonal_index_map [queen .getDescendingDiagonalIndex ()]
113
+ descending_diagonal_index_list = self .descending_diagonal_index_map [queen .get_descending_diagonal_index ()]
115
114
descending_diagonal_index_list .remove (queen )
116
115
self .score += len (descending_diagonal_index_list )
117
116
118
- def calculateScore (self ) -> HardSoftScore :
117
+ def calculate_score (self ) -> HardSoftScore :
119
118
return SimpleScore .of (self .score )
120
119
121
120
solver_config = SolverConfig (
122
121
solution_class = Solution ,
123
122
entity_class_list = [Queen ],
124
123
score_director_factory_config = ScoreDirectorFactoryConfig (
125
- incremental_score_calculator_class = IncrementalScoreCalculator
124
+ incremental_score_calculator_class = NQueensIncrementalScoreCalculator
126
125
),
127
126
termination_config = TerminationConfig (
128
127
best_score_limit = '0'
@@ -141,22 +140,22 @@ def calculateScore(self) -> HardSoftScore:
141
140
right_queen = solution .queen_list [j ]
142
141
assert left_queen .row is not None and right_queen .row is not None
143
142
assert left_queen .row != right_queen .row
144
- assert left_queen .getAscendingDiagonalIndex () != right_queen .getAscendingDiagonalIndex ()
145
- assert left_queen .getDescendingDiagonalIndex () != right_queen .getDescendingDiagonalIndex ()
143
+ assert left_queen .get_ascending_diagonal_index () != right_queen .get_ascending_diagonal_index ()
144
+ assert left_queen .get_descending_diagonal_index () != right_queen .get_descending_diagonal_index ()
146
145
147
146
148
147
@pytest .mark .skip (reason = "Special case where you want to convert all items of the list before returning."
149
148
"Doing this for all conversions would be expensive."
150
149
"This feature is not that important, so skipping for now." )
151
150
def test_constraint_match_enabled_incremental_score_calculator ():
152
151
@incremental_score_calculator
153
- class IncrementalScoreCalculator :
152
+ class NQueensIncrementalScoreCalculator ( ConstraintMatchAwareIncrementalScoreCalculator ) :
154
153
score : int
155
154
row_index_map : dict
156
155
ascending_diagonal_index_map : dict
157
156
descending_diagonal_index_map : dict
158
157
159
- def resetWorkingSolution (self , working_solution : Solution , constraint_match_enabled = False ):
158
+ def reset_working_solution (self , working_solution : Solution , constraint_match_enabled = False ):
160
159
n = working_solution .n
161
160
self .row_index_map = dict ()
162
161
self .ascending_diagonal_index_map = dict ()
@@ -172,22 +171,22 @@ def resetWorkingSolution(self, working_solution: Solution, constraint_match_enab
172
171
for queen in working_solution .queen_list :
173
172
self .insert (queen )
174
173
175
- def beforeEntityAdded (self , entity : any ):
174
+ def before_entity_added (self , entity : any ):
176
175
pass
177
176
178
- def afterEntityAdded (self , entity : any ):
177
+ def after_entity_added (self , entity : any ):
179
178
self .insert (entity )
180
179
181
- def beforeVariableChanged (self , entity : any , variableName : str ):
180
+ def before_variable_changed (self , entity : any , variableName : str ):
182
181
self .retract (entity )
183
182
184
- def afterVariableChanged (self , entity : any , variableName : str ):
183
+ def after_variable_changed (self , entity : any , variableName : str ):
185
184
self .insert (entity )
186
185
187
- def beforeEntityRemoved (self , entity : any ):
186
+ def before_entity_removed (self , entity : any ):
188
187
self .retract (entity )
189
188
190
- def afterEntityRemoved (self , entity : any ):
189
+ def after_entity_removed (self , entity : any ):
191
190
pass
192
191
193
192
def insert (self , queen : Queen ):
@@ -197,10 +196,10 @@ def insert(self, queen: Queen):
197
196
row_index_list = self .row_index_map [row_index ]
198
197
self .score -= len (row_index_list )
199
198
row_index_list .append (queen )
200
- ascending_diagonal_index_list = self .ascending_diagonal_index_map [queen .getAscendingDiagonalIndex ()]
199
+ ascending_diagonal_index_list = self .ascending_diagonal_index_map [queen .get_ascending_diagonal_index ()]
201
200
self .score -= len (ascending_diagonal_index_list )
202
201
ascending_diagonal_index_list .append (queen )
203
- descending_diagonal_index_list = self .descending_diagonal_index_map [queen .getDescendingDiagonalIndex ()]
202
+ descending_diagonal_index_list = self .descending_diagonal_index_map [queen .get_descending_diagonal_index ()]
204
203
self .score -= len (descending_diagonal_index_list )
205
204
descending_diagonal_index_list .append (queen )
206
205
@@ -211,17 +210,17 @@ def retract(self, queen: Queen):
211
210
row_index_list = self .row_index_map [row_index ]
212
211
row_index_list .remove (queen )
213
212
self .score += len (row_index_list )
214
- ascending_diagonal_index_list = self .ascending_diagonal_index_map [queen .getAscendingDiagonalIndex ()]
213
+ ascending_diagonal_index_list = self .ascending_diagonal_index_map [queen .get_ascending_diagonal_index ()]
215
214
ascending_diagonal_index_list .remove (queen )
216
215
self .score += len (ascending_diagonal_index_list )
217
- descending_diagonal_index_list = self .descending_diagonal_index_map [queen .getDescendingDiagonalIndex ()]
216
+ descending_diagonal_index_list = self .descending_diagonal_index_map [queen .get_descending_diagonal_index ()]
218
217
descending_diagonal_index_list .remove (queen )
219
218
self .score += len (descending_diagonal_index_list )
220
219
221
- def calculateScore (self ) -> HardSoftScore :
220
+ def calculate_score (self ) -> HardSoftScore :
222
221
return SimpleScore .of (self .score )
223
222
224
- def getConstraintMatchTotals (self ):
223
+ def get_constraint_match_totals (self ):
225
224
row_conflict_constraint_match_total = DefaultConstraintMatchTotal (
226
225
'NQueens' ,
227
226
'Row Conflict' ,
@@ -255,14 +254,14 @@ def getConstraintMatchTotals(self):
255
254
descending_diagonal_constraint_match_total
256
255
]
257
256
258
- def getIndictmentMap (self ):
257
+ def get_indictment_map (self ):
259
258
return None
260
259
261
260
solver_config = SolverConfig (
262
261
solution_class = Solution ,
263
262
entity_class_list = [Queen ],
264
263
score_director_factory_config = ScoreDirectorFactoryConfig (
265
- incremental_score_calculator_class = IncrementalScoreCalculator
264
+ incremental_score_calculator_class = NQueensIncrementalScoreCalculator
266
265
),
267
266
termination_config = TerminationConfig (
268
267
best_score_limit = '0'
@@ -282,8 +281,8 @@ def getIndictmentMap(self):
282
281
right_queen = solution .queen_list [j ]
283
282
assert left_queen .row is not None and right_queen .row is not None
284
283
assert left_queen .row != right_queen .row
285
- assert left_queen .getAscendingDiagonalIndex () != right_queen .getAscendingDiagonalIndex ()
286
- assert left_queen .getDescendingDiagonalIndex () != right_queen .getDescendingDiagonalIndex ()
284
+ assert left_queen .get_ascending_diagonal_index () != right_queen .get_ascending_diagonal_index ()
285
+ assert left_queen .get_descending_diagonal_index () != right_queen .get_descending_diagonal_index ()
287
286
288
287
score_manager = SolutionManager .create (solver_factory )
289
288
constraint_match_total_map = score_manager .explain (solution ).constraint_match_total_map
@@ -315,21 +314,19 @@ def getIndictmentMap(self):
315
314
316
315
317
316
def test_error_message_for_missing_methods ():
318
- with pytest .raises (ValueError , match = (
319
- f"The following required methods are missing from @incremental_score_calculator class "
320
- f".*IncrementalScoreCalculatorMissingMethods.*: "
321
- f"\\ ['resetWorkingSolution', 'beforeEntityRemoved', 'afterEntityRemoved', 'calculateScore'\\ ]"
322
- )):
317
+ with pytest .raises (TypeError ): # Exact error message from ABC changes between versions
323
318
@incremental_score_calculator
324
- class IncrementalScoreCalculatorMissingMethods :
325
- def beforeEntityAdded (self , entity : any ):
319
+ class IncrementalScoreCalculatorMissingMethods ( IncrementalScoreCalculator ) :
320
+ def before_entity_added (self , entity ):
326
321
pass
327
322
328
- def afterEntityAdded (self , entity : any ):
323
+ def after_entity_added (self , entity ):
329
324
pass
330
325
331
- def beforeVariableChanged (self , entity : any , variableName : str ):
326
+ def before_variable_changed (self , entity , variable_name : str ):
332
327
pass
333
328
334
- def afterVariableChanged (self , entity : any , variableName : str ):
329
+ def after_variable_changed (self , entity , variable_name : str ):
335
330
pass
331
+
332
+ score_calculator = IncrementalScoreCalculatorMissingMethods ()
0 commit comments