|
7 | 7 | from typing import Iterable |
8 | 8 |
|
9 | 9 | from traincheck.invariant import CheckerResult, Invariant |
10 | | -from traincheck.invariant.base_cls import APIParam, VarNameParam, VarTypeParam |
11 | 10 |
|
12 | 11 |
|
13 | 12 | def _format_invariant_label(invariant: Invariant) -> str: |
14 | 13 | display = invariant.relation.to_display_name(invariant.params) |
15 | 14 | if display: |
16 | 15 | return display |
17 | | - # When to_display_name returns None, fall back — but sanitize params that |
18 | | - # contain internal TrainCheck proxy bookkeeping names (_TRAINCHECK_*) so |
19 | | - # they never surface raw in the UI. |
20 | | - for p in invariant.params: |
21 | | - if isinstance(p, (VarTypeParam, VarNameParam)) and p.attr_name.startswith( |
22 | | - "_TRAINCHECK_" |
23 | | - ): |
24 | | - # Build a minimal label using only the API param, hiding internals |
25 | | - api_parts = [q for q in invariant.params if isinstance(q, APIParam)] |
26 | | - from traincheck.invariant.base_cls import _short_api_name |
27 | | - |
28 | | - if api_parts: |
29 | | - func = _short_api_name(api_parts[0].api_full_name) |
30 | | - return f"{func}() [internal tracking]" |
31 | | - return f"{invariant.relation.__name__} [internal tracking]" |
32 | 16 | if invariant.text_description: |
33 | 17 | return invariant.text_description |
34 | 18 | params = ", ".join(str(param) for param in invariant.params) |
@@ -290,7 +274,9 @@ def build_online_report_data( |
290 | 274 | and warm_up_steps is not None |
291 | 275 | and sampling_interval > 0 |
292 | 276 | ): |
293 | | - checked_steps = max(0, current_step - warm_up_steps) // sampling_interval + 1 |
| 277 | + checked_steps = max(0, current_step - warm_up_steps) // sampling_interval + min( |
| 278 | + current_step, warm_up_steps |
| 279 | + ) |
294 | 280 |
|
295 | 281 | def _make_entry(inv: Invariant, count: int) -> dict: |
296 | 282 | detail = violation_details.get(inv, {}) |
|
0 commit comments