-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Fix progressbar with nested compound step samplers #7776
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Currently, PyMC-BART works without this. However, a recent PR, which allows multiple BART RVs, fails without this. I have not tried with the alternative #7730. |
46226a8
to
4b4c28d
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR refactors and centralizes progress bar functionality, updates sampling step methods to use the new API, and adds a regression test for nested compound samplers.
- Move
CustomProgress
,RecolorOnFailureBarColumn
,ProgressBarManager
, and related logic frompymc/util.py
into a newpymc/progress_bar.py
module. - Update all imports to point to
pymc.progress_bar
and adjust references to the new_make_progressbar_update_functions
API. - Add an integration test (
test_progressbar_nested_compound
) to guard against regressions in nestedCompoundStep
progress bars.
Reviewed Changes
Copilot reviewed 18 out of 18 changed files in this pull request and generated 1 comment.
Show a summary per file
File | Description |
---|---|
tests/test_progress_bar.py | Add regression test for nested compound-step sampling progress. |
pymc/variational/inference.py | Update imports to use new CustomProgress location. |
pymc/util.py | Remove old progress-bar classes and imports. |
pymc/tuning/starting.py | Update progress-bar import to new module. |
pymc/step_methods/slicer.py | Rename update-stats API to _make_progressbar_update_functions . |
pymc/step_methods/metropolis.py | Rename and adjust update-stats API. |
pymc/step_methods/hmc/*.py | Rename and adjust update-stats API in HMC and NUTS. |
pymc/step_methods/compound.py | Rename and aggregate update-stat functions. |
pymc/smc/sampling.py | Update progress-bar import. |
pymc/sampling/*.py | Update progress-bar imports in various sampling pathways. |
pymc/progress_bar.py | New module consolidating progress-bar logic and classes. |
.github/workflows/tests.yml | Include the new test file in CI. |
Comments suppressed due to low confidence (1)
pymc/progress_bar.py:37
- [nitpick] Consider adding unit tests for
CustomProgress
(e.g., togglingdisable
andinclude_headers
) to verify that tasks are added, updated, or suppressed as expected.
class CustomProgress(Progress):
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #7776 +/- ##
==========================================
- Coverage 92.92% 92.88% -0.04%
==========================================
Files 107 108 +1
Lines 18299 18313 +14
==========================================
+ Hits 17004 17010 +6
- Misses 1295 1303 +8
🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ricardoV94 can you give the changes i pushed a final once over then we can merge this
@aloctavodia can you check if this also fixes the problem on your end? |
pymc/step_methods/metropolis.py
Outdated
# Tune is always False, because this step does not have any tunable parameters. | ||
stats = {"tune": False} | ||
return q, [stats] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is it a dict inside a list, and why not just an empty dict?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- All step samplers return a dict inside a list, idk
- Because the CategoricalGibbsMetropolis has
tune
declared in itsstats_dtypes_shapes
, which I interpreted as a promise to returntune
from its step function. It's incorrect that it wasn't doing this before.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Okay, I would just remove it but fine. Weird thing for the dict inside a list xD, open an issue to stop doing that?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
technically It's your PR. I think removing the stats_dtypes_shapes
is also a good way to go.
We still need to return an empty dictionary though, otherwise the zip(update_stats_fns, stats)
fails (because there is always an update function, but sometimes no stats)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The shape is used by mcbackend I thing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
empty dict is fine?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No need to do in this PR though
Every step sampler can now decide whether sampling is failing or not by setting "failing" in the returned update dict
c341491
to
6748186
Compare
@jessegrabowski I cleanup a bit the PR, if tests pass I think we're good. Wanna take a last look? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One docstring out of date, and a small issue I want to bring to your attention.
Oops my PR got merged stale and a test is failing |
The other failure is ours |
There was a test with a hardcoded list of expected stats. It should pass now (not sure about the pre-commit problem) |
pre-commit seems legit |
Alternative to #7730 that fixes #7721 and fixes #7724