This repository was archived by the owner on Oct 6, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathtest_logging.py
More file actions
129 lines (114 loc) · 4.39 KB
/
test_logging.py
File metadata and controls
129 lines (114 loc) · 4.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import logging
from timefold.solver import *
from timefold.solver.domain import *
from timefold.solver.config import *
from timefold.solver.score import *
from dataclasses import dataclass, field
from typing import Annotated, List
@planning_entity
@dataclass
class Entity:
code: Annotated[str, PlanningId]
value: Annotated[int, PlanningVariable] = field(default=None, compare=False)
@constraint_provider
def my_constraints(constraint_factory: ConstraintFactory):
return [
constraint_factory.for_each(Entity)
.reward(SimpleScore.ONE, lambda entity: entity.value)
.as_constraint('Maximize value'),
]
@planning_solution
@dataclass
class Solution:
entities: Annotated[List[Entity], PlanningEntityCollectionProperty]
value_range: Annotated[List[int], ValueRangeProvider]
score: Annotated[SimpleScore, PlanningScore] = field(default=None)
def __str__(self) -> str:
return str(self.entities)
def assert_in_logs(log_messages: list[str], message: str):
for log_message in log_messages:
if message in log_message:
return
raise AssertionError(f'Expected message {message} in {log_messages}, but it was not found.')
def test_log_events_are_forwarded(caplog):
with caplog.at_level(logging.INFO, logger="timefold.solver"):
solver_config = SolverConfig(
solution_class=Solution,
entity_class_list=[Entity],
score_director_factory_config=ScoreDirectorFactoryConfig(
constraint_provider_function=my_constraints,
),
termination_config=TerminationConfig(
best_score_limit='9'
)
)
solver_factory = SolverFactory.create(solver_config)
solver = solver_factory.build_solver(SolverConfigOverride(
termination_config=TerminationConfig(
best_score_limit='3'
)
))
problem = Solution([Entity('A')], [1, 2, 3])
solver.solve(problem)
log_messages = [rec.message for rec in caplog.records]
# INFO
assert_in_logs(log_messages, 'Solving started')
# INFO
assert_in_logs(log_messages, 'Solving ended')
def test_support_changing_log_levels(caplog):
with caplog.at_level(logging.DEBUG, logger="timefold.solver"):
solver_config = SolverConfig(
solution_class=Solution,
entity_class_list=[Entity],
score_director_factory_config=ScoreDirectorFactoryConfig(
constraint_provider_function=my_constraints,
),
termination_config=TerminationConfig(
best_score_limit='9'
)
)
solver_factory = SolverFactory.create(solver_config)
solver = solver_factory.build_solver(SolverConfigOverride(
termination_config=TerminationConfig(
best_score_limit='3'
)
))
problem = Solution([Entity('A')], [1, 2, 3])
solver.solve(problem)
log_messages = [rec.message for rec in caplog.records]
# INFO
assert_in_logs(log_messages, 'Solving started')
# DEBUG
assert_in_logs(log_messages, 'CH step (0)')
# INFO
assert_in_logs(log_messages, 'Solving ended')
def test_support_trace_logs(caplog):
# Python has no logging.TRACE, logging.DEBUG = 10, so TRACE = 5
with caplog.at_level(5, logger="timefold.solver"):
solver_config = SolverConfig(
solution_class=Solution,
entity_class_list=[Entity],
score_director_factory_config=ScoreDirectorFactoryConfig(
constraint_provider_function=my_constraints,
),
termination_config=TerminationConfig(
best_score_limit='9'
)
)
solver_factory = SolverFactory.create(solver_config)
solver = solver_factory.build_solver(SolverConfigOverride(
termination_config=TerminationConfig(
best_score_limit='3'
)
))
problem = Solution([Entity('A')], [1, 2, 3])
solver.solve(problem)
log_messages = [rec.message for rec in caplog.records]
# INFO
assert_in_logs(log_messages, 'Solving started')
# DEBUG
assert_in_logs(log_messages, 'CH step (0)')
# TRACE/5
assert_in_logs(log_messages, 'Move index (1)')
# INFO
assert_in_logs(log_messages, 'Solving ended')