Skip to content

refactor(skore/progress): Add comments and simplify#2032

Closed
auguste-probabl wants to merge 6 commits intoprobabl-ai:mainfrom
auguste-probabl:push-xwnvukqxwvmp
Closed

refactor(skore/progress): Add comments and simplify#2032
auguste-probabl wants to merge 6 commits intoprobabl-ai:mainfrom
auguste-probabl:push-xwnvukqxwvmp

Conversation

@auguste-probabl
Copy link
Collaborator

In particular, make it clearer that progress_decorator is very specific to skore.*Reports

The test applies to things that have a `reports_` attribute,
but in reality the only things `progress_decorator` applies to are
skore.*Report and their associated Accessors.
@github-actions
Copy link
Contributor

Coverage

Coverage Report for skore/
FileStmtsMissCoverMissing
skore/src/skore
   __init__.py230100% 
   _config.py310100% 
   exceptions.py440%4, 15, 19, 23
skore/src/skore/_sklearn
   __init__.py60100% 
   _base.py1981492%45, 58, 127, 130, 183, 186–187, 189–192, 225, 228–229
   find_ml_task.py610100% 
   types.py27196%28
skore/src/skore/_sklearn/_comparison
   __init__.py70100% 
   feature_importance_accessor.py39294%90, 109
   metrics_accessor.py178398%173, 253, 1215
   report.py1070100% 
   utils.py540100% 
skore/src/skore/_sklearn/_cross_validation
   __init__.py90100% 
   data_accessor.py45393%128, 131, 134
   feature_importance_accessor.py240100% 
   metrics_accessor.py182199%244
   report.py135199%487
skore/src/skore/_sklearn/_estimator
   __init__.py90100% 
   data_accessor.py580100% 
   feature_importance_accessor.py144298%223–224
   metrics_accessor.py356897%200, 202, 209, 300, 369, 373, 388, 423
   report.py167298%448–449
skore/src/skore/_sklearn/_plot
   __init__.py30100% 
   base.py102793%61–62, 200, 224–226, 230
   utils.py770100% 
skore/src/skore/_sklearn/_plot/data
   __init__.py20100% 
   table_report.py185199%706
skore/src/skore/_sklearn/_plot/metrics
   __init__.py60100% 
   confusion_matrix.py70494%92, 100, 122, 230
   feature_importance_display.py672168%88, 121–122, 124, 142–146, 148–155, 158–160, 162
   metrics_summary_display.py80100% 
   precision_recall_curve.py280598%455, 555, 559, 619, 751
   prediction_error.py227597%179, 186, 422, 505, 705
   roc_curve.py292897%385, 508, 513, 614, 619, 623, 692, 832
skore/src/skore/_sklearn/train_test_split
   __init__.py00100% 
   train_test_split.py580100% 
skore/src/skore/_sklearn/train_test_split/warning
   __init__.py80100% 
   high_class_imbalance_too_few_examples_warning.py19194%83
   high_class_imbalance_warning.py200100% 
   random_state_unset_warning.py100100% 
   shuffle_true_warning.py90100% 
   stratify_is_set_warning.py100100% 
   time_based_column_warning.py210100% 
   train_test_split_warning.py30100% 
skore/src/skore/_utils
   __init__.py6266%8, 13
   _accessor.py90396%34, 146, 190
   _environment.py270100% 
   _fixes.py80100% 
   _index.py50100% 
   _logger.py22481%15–17, 19
   _measure_time.py100100% 
   _parallel.py38392%23, 33, 124
   _patch.py13561%21, 23–24, 35, 37
   _progress_bar.py450100% 
   _repr_html.py80100% 
   _show_versions.py380100% 
   _testing.py550100% 
skore/src/skore/project
   __init__.py20100% 
   project.py480100% 
   summary.py740100% 
   widget.py165696%436, 439–441, 525–526
TOTAL399511697% 

Tests Skipped Failures Errors Time
1059 5 💤 0 ❌ 0 🔥 4m 24s ⏱️

@github-actions
Copy link
Contributor

Documentation preview @ fb74952

Comment on lines -72 to +79
if hasattr(self_obj, "reports_"):
if isinstance(self_obj, ComparisonReport):
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change is a prerequisite for #2033.

Copy link
Member

@glemaitre glemaitre left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the delay. I think to not have something tight to the ComparisonReport would make it better.

# assigning progress to child reports
# Make child reports share their parent's Progress instance
# so that there is only one Progress instance at any given point
reports_to_cleanup: list[Any] = []
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thinking a bit more about the problem, I think that it would be cleaner to have a parameter in the decorator (i.e. clean_child_reports) that would trigger the cleaning. It means that we call in the ComparatorReport, the decorator with clean_child_reports=True that trigger this code without having to check the type of report. For the other report, then we need to pass clean_child_reports=False.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The point of this PR is to reduce progress_decorator's complexity (which we have been bit by many times now) by recognizing that it is only used within *Report objects, and making it less general.

In other words, what I mean is, the proposed parameter is really just another way of asking "is the report a ComparisonReport", and I'd rather just ask that question directly.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What I don't like here is the fact that we import ComparisonReport.

Could we instead create a report._report_type that is aligned with the other case, for instance when calling _compute_data_for_display that takes report_type (

)

If we have this attribute for each type of report, we only need to propagate it instead of hard-coding it. It means that here we only need to have if "comparison" in self_obj.report_type.

But otherwise, I'm fine with the rest.

assert task._progress_info is None


def test_child_report_cleanup():
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With my proposal then we can test the procedure because we are not tight anymore to a ComparisonReport instance specifically.

@glemaitre glemaitre requested a review from rouk1 as a code owner January 16, 2026 08:57
@thomass-dev thomass-dev marked this pull request as draft January 16, 2026 08:59
@thomass-dev

This comment was marked as resolved.

@thomass-dev thomass-dev removed the request for review from rouk1 January 16, 2026 09:18
@auguste-probabl
Copy link
Collaborator Author

Obsoleted by #2357

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants