-
-
Notifications
You must be signed in to change notification settings - Fork 409
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
MonteCarlo packet progress bar completes to 100% #2237
MonteCarlo packet progress bar completes to 100% #2237
Conversation
*beep* *bop* Hi, human. I'm the @tardis-bot and couldn't find your records in my database. I think we don't know each other, or you changed your credentials recently. Please add your name and email to In case you need to map an existing alias, follow this example. |
Thanks for the PR! Please make sure to run |
@sonachitchyan Thank you for the quick review! I have made the changes after running it. |
Codecov Report
@@ Coverage Diff @@
## master #2237 +/- ##
=======================================
Coverage 71.81% 71.82%
=======================================
Files 133 133
Lines 12355 12358 +3
=======================================
+ Hits 8873 8876 +3
Misses 3482 3482
📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more |
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.
Looks good to me!
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.
This is maybe a better approach. I am unsure what you are doing (which is like, in the end, when all the iterations have finished, you are refreshing the progress bar) and if this is a good idea. Try this, as it refreshes the progress bar after each packet. And thank you for contributing to TARDIS :)
@@ -128,6 +132,7 @@ def montecarlo_radial1d( | |||
virt_packet_last_line_interaction_out_id | |||
).ravel() | |||
update_iterations_pbar(1) | |||
refresh_packet_pbar() |
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.
I suggest not making a function altogether here. Doing the usual packet_pbar.refresh()
may be better. You may need to check where exactly this can be referenced and changed but doing so would make it easier and not complex.
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.
I agree that refreshing the progress bar after every packet makes the most logical sense.
However, the bar is indeed updated automatically after every packet is sent. The issue arises at the end of any given iteration when packet_pbar.update()
is called to update the packet but the change is not reflected. This can be solved by refreshing the bar at the end of every iteration (not just the final one).
def refresh_packet_pbar(): | ||
""" | ||
Refresh packet progress bar after each iteration. | ||
|
||
""" | ||
packet_pbar.refresh() | ||
|
||
|
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.
Moving this inside the above function may do the trick. Please let me know if that works. Also add a single line comment for the same instead of having a function.
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.
Since the update/refresh does not occur only at the end of each iteration, I decided to call it when the iteration ends. Adding the packet_pbar.refresh()
at every packet would increase the simulation time severely (around 1 min/iteration) in contrast to refreshing only at the end (70s for 20 iterations on my system).
This is why I could not find a suitable place to add the refresh anywhere in the function above (in update_packet_pbar()
). Also because one cannot conclude when the final packet is sent (probably because it is numba jitted in parallel mode).
Thus, the only remaining solution was to either add the packet_bar.refresh()
within the update_iterations_pbar()
function as it is called at the end of every iteration, or have a function of its own.
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.
Thus, the only remaining solution was to either add the
packet_bar.refresh()
within theupdate_iterations_pbar()
function as it is called at the end of every iteration, or have a function of its own.
I suppose it is better to have just this line packet_bar.refresh()
after the update_iterations_pbar(1)
as having a function just for this is not good, in my opinion, and is just overhead with a call within a functional call.
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.
I suppose it is better to have just this line
packet_bar.refresh()
after theupdate_iterations_pbar(1)
as having a function just for this is not good, in my opinion, and is just overhead with a call within a functional call.
The packet_pbar and iterations_pbar instances of the progress bars are initialized and processed in tardis/utility/base.py
. So, packet_bar.refresh()
after update_iterations_pbar(1)
would require instantiating the progress bars in montecarlo_numba/base.py
as well, which may not be the best approach.
I agree that it is an avoidable overhead, in which case I can just add it in the update_iterations_pbar()
method after iterations_pbar.update(i)
. It would look something like:
def update_iterations_pbar(i):
iterations_pbar.update(i)
packet_bar.refresh()
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.
This would be inefficient as the current implementation updates the progress bar by 1 per cent after a specific increase in the progress as the packets are propagated. What this may do is that after every 1 per cent, the progress bar will get refreshed and updated. For this, I suppose you can look into making something like this: (pseudo code here)
If the progress is above, let's say, 95% (it would be good if this is as close to 100 as possible or maybe even 100):
(This could also be by iteration number, like after iteration, maybe 19 (if we are running for 20 iterations))
Refresh the bar for each iteration until it reaches the end,
Else:
Keep doing what it initially was doing,
What happens with the numba jitted
functions is that the information is present with the compiler (machine level compiler) but is not actually passed onto into Python runtime (Python interpreter), which causes loss of information as hence it doesn't understand how to add all the multithreaded information together from different cores.
Another possible solution could be to update the progress bar by returning the instance of the progress bar from the update_iterations_pbar()
function and then updating it when all the progress is finished. What I mean by this is that even when running TARDIS in multithreaded mode, the progress bar considers all the progress made on all the cores. And in the end, please correct me; it is still compiled on a single core. So a single call for refreshing the progress bar at the end after completing all the propagated packets may do the trick. It works for all other iterations except the last one. This would be more efficient.
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.
This would be inefficient as the current implementation updates the progress bar by 1 per cent after a specific increase in the progress as the packets are propagated. What this may do is that after every 1 per cent, the progress bar will get refreshed and updated.
The update_iterations_pbar()
is called to update the iterations progress bar (iterations_pbar
) at the end of each iteration, only after the packet progress bar (packet_pbar
) has finished updating for that iteration, i.e., after all the packets for that iteration have been sent. So I think this refresh would not interfere with the packet_pbar
while the packets are being sent and only update it after sending 100% of the packets.
What happens with the numba jitted functions is that the information is present with the compiler (machine level compiler) but is not actually passed onto into Python runtime (Python interpreter), which causes loss of information as hence it doesn't understand how to add all the multithreaded information together from different cores.
Thank you for the clear description. This may be why there is no possible way to fetch the completion percentage as the number of packets sent through different cores is not trackable.
So a single call for refreshing the progress bar at the end after the completion of all the propagated packets may do the trick.
My intention with the code block mentioned in the previous reply was precisely this. Since update_iterations_pbar()
is called at the end of every iteration, adding the refresh part within it would also be subject to a call at the end of each iteration when all the packets have propagated. Please correct me if I've misunderstood.
* Refresh packet progress bar after every iteration * Udpdated .mailmap * Reformatted with black
* Adding rate matrix index (tardis-sn#2132) * adding NlteIndexHelper class * adding nlte_ionization_species to io/schemas/plasma.yml * adding nlte_excitation_species to io/schemas/plasma.yml * added nlte_ionization_species in assemble_plasma * fixed the issue with getting nlte_ionization_species from config * fixed transforming string from config to tuple for nlte ionization species * ran black * attempt of writing tests 1 * ran black * test attempt 2 * black on test_hdf_plasma * experimenting with revert * attempt 3 * reverted tardis/plasma/tests/test_complete_plasmas.py * reverted tardis/plasma/tests/test_hdf_plasma.py * adding cofig for nlte * adding fixture for tardis_cofig_verysimple_nlte * added test_plasma_nlte_section_config * ran black * fixed the issue with the test, ran it locally * ran black on necessary files * updated description in schemas * switching from nlte_ionization to be used from self * ran black * changed nlte_properties_new to nlte_solver_properties * adding nlte_rate_equation_matrix.py * reverting to previous commit * Restructuring NumbaModel (tardis-sn#2136) * Added NumbaRadial1DGeometry * Added to_numba function * Fixed incorrect naming of numba spec * Updated docstring * Updated to_numba docstring * Updated docstring * Updated numba model to contain only time explosion * updated docstring formatting error * Moved geometry to new geometry sub package * Updated all functions where numba model was used * Updated to specify units * converting time_explosion to seconds specifically * Added numba geometry fixture * Updated tests to work with numba geometry * Updated formatting * Fixed issue with geometry initialization * Fixed formatting * Add missing cell to download atom data (tardis-sn#2146) * Possible fix for prerelease workflow (tardis-sn#2127) * Possible fix for prerelease workflow * Fix double @ symbol * Changed to v2 * Pin setuptools_scm to v6 (tardis-sn#2147) * Pin setuptools_scm to v6 * Fix typo * Adding nlte_rate_equation_solver.py (tardis-sn#2140) * added nlte_rate_equation_matrix * adding the rate_equation_matrix * moved rate_matrix into a class NLTERateEquationSolver * fixed a bug in rate_matrix_index, added an example for checking if rate matrix works properly * changed the initial electron density for now * added tests, fixed a small bug * added some doctrings * fixed a typo * added some doctrings * added some doctrings part 2 * added some docstrings part 3 * removed unnecessary import * Update tardis/plasma/properties/nlte_rate_equation_solver.py Co-authored-by: Christian Vogl <[email protected]> * changed how atomic number is created from rate_matrix_index * changed call of a function * got rid of unnecessary if statement in set_nlte_ion_rate * renamed last_row to charge_conservation_row * switched 0, 1 to atomic_number and ion_number to make it more readable * swtihed from rates to coefficients * changed the matrix set up to only keep necessary row for nlte_ion * ran black * fixing some doctrings * swtiched from using numbers to index names * switched the return statement to NotImplementedError * changed groupby from 0, 1 to atomic number, ion number * fixed an issue in the test * ran black Co-authored-by: Christian Vogl <[email protected]> * Set specific qgrid feedstock version (tardis-sn#2152) * Pre-release 2022.11.17 (tardis-sn#2155) Automated changes for pre-release 2022.11.17 * Post-release 2022.11.17 (tardis-sn#2156) Automated changes for post-release 2022.11.17 * Pre-release 2022.11.20 (tardis-sn#2160) Automated changes for pre-release 2022.11.20 * Fix relativistic packet initialization (tardis-sn#2159) * Fix setting of full relativity flag * Add relativistic packet source Co-authored-by: Stuart Sim <[email protected]> * Fix relativistic vpackets on inner boundary Co-authored-by: Stuart Sim <[email protected]> * Fixing typos for nlte ion (tardis-sn#2154) * fixing typos on rate_matrix * changed the np arange to use 0 instead of 0.0 * NLTE jacobian matrix (tardis-sn#2158) * added jacobian matrix and deriv block functions * added doctrings * ran black * switched from df to array * added an initial test * ran black * reorganized the tests * added doctrings * added todo comments for future work * ran black * Kilonova missing zeta (tardis-sn#2150) * solved KN ZetaData issue * KN missing Zeta fixed * mailmap changed * Pre-release 2022.12.11 (tardis-sn#2172) Automated changes for pre-release 2022.12.11 * Post-release 2022.12.12 (tardis-sn#2173) Automated changes for post-release 2022.12.12 * Add missing __init__.py files to transport and geometry subpackages (tardis-sn#2170) * Add missing __init__.py files to transport subpackage * Add missing __init__.py file to geometry subpackage * Pre-release 2022.12.25 (tardis-sn#2180) Automated changes for pre-release 2022.12.25 * Post-release 2022.12.26 (tardis-sn#2182) Automated changes for post-release 2022.12.26 * Pre-release 2023.01.08 (tardis-sn#2186) Automated changes for pre-release 2023.01.08 * Post-release 2023.01.11 (tardis-sn#2188) Automated changes for post-release 2023.01.11 * Downloading nlte_atom_data in ref data (tardis-sn#2187) adding nlte_atom_data to be downloaded * Adding nlte solver (tardis-sn#2171) * adding solver part in the calculate method * adding the objective function * added the solution vector method * final touches for the solver * tests, attempt 1 * ran black * fixed the issue with tests * ran black * added missing doctrings in the nlte_rate_equation_solver.py * added doctrings to tests * changed the test to explicitly calculate the lte solution ion number densities. * ran black * added the atom data file to download_reference_data.sh * fixed download_reference_data.sh * Revert "added the atom data file to download_reference_data.sh" This reverts commit 58ce29e. * got rid of index i, kept only shell * switched DataFrame to pandas.DataFrame in the docstrings * docstring bug fix * got rid of the deepcopy of nlte atomic data file * changed the number of shells to 5 * Update tardis/io/tests/data/tardis_configv1_nlte.yml Co-authored-by: Christian Vogl <[email protected]> * Update tardis/plasma/properties/nlte_rate_equation_solver.py Co-authored-by: Christian Vogl <[email protected]> * Update tardis/io/tests/data/tardis_configv1_nlte.yml Co-authored-by: Christian Vogl <[email protected]> * Update tardis/io/tests/data/tardis_configv1_nlte.yml Co-authored-by: Christian Vogl <[email protected]> * ran black * Update tardis/plasma/properties/nlte_rate_equation_solver.py Co-authored-by: Christian Vogl <[email protected]> * Update tardis/plasma/tests/test_nlte_solver.py Co-authored-by: Christian Vogl <[email protected]> * restructured a summary in a docstring for the solution_vector_block * ran black * added the test for w=0 case * Update tardis/plasma/properties/nlte_rate_equation_solver.py Co-authored-by: Christian Vogl <[email protected]> * Update tardis/plasma/properties/nlte_rate_equation_solver.py Co-authored-by: Christian Vogl <[email protected]> * Update tardis/plasma/tests/test_nlte_solver.py Co-authored-by: Christian Vogl <[email protected]> * fixed an issue in a docsting * fixed an issue in a docsting * removed a TODO comment Co-authored-by: Christian Vogl <[email protected]> * Rename T variables to temperature (tardis-sn#2185) * fixes tardis-sn#1600 * fixes tardis-sn#1600 * Update tardis/montecarlo/packet_source.py Co-authored-by: Atharva Arya <[email protected]> * fixes codestyle * improve codestyle * rename the function * Update packet_source.py * improve codequality * add commit * Update packet_source.py Co-authored-by: Atharva Arya <[email protected]> * Fixing test_store_runner_to_hdf (tardis-sn#2198) * checking if the object has the attribute decode * fixed another decode issue * Reading nlte_excitation_species from config (tardis-sn#2195) * implementing nlte_excitation * ran black * fixed a typo * got rid of unnecessary lines * rewrote tests * made a change on assigning the config values to plasma properties * fixed the tests * Update tardis/io/tests/test_config_reader.py Co-authored-by: Christian Vogl <[email protected]> --------- Co-authored-by: Christian Vogl <[email protected]> * Fix config reader tests (tardis-sn#2200) Fix config tests * Pre-release 2023.02.05 (tardis-sn#2205) Automated changes for pre-release 2023.02.05 * Post-release 2023.02.06 (tardis-sn#2206) Automated changes for post-release 2023.02.06 * Add version tag to simulation objects (tardis-sn#2190) * Add test for versioning info * Add version string to simulation objects * Add name to mailmap * Add another alias to mailmap * Pre-release 2023.02.12 (tardis-sn#2208) Automated changes for pre-release 2023.02.12 * Post-release 2023.02.16 (tardis-sn#2210) Automated changes for post-release 2023.02.16 * Pre-release 2023.02.19 (tardis-sn#2211) Automated changes for pre-release 2023.02.19 * Cache LFS objects in the tests workflow (tardis-sn#2194) * Cache LFS objects (actions/checkout#165) * Delete steps to see file size Delete commented step which used to download LFS objects using the bash script * Add lfs:false flag * Add my username to .mailmap * Cache hit and allow pytest to run all tests * Do git lfs checkout if the cache key is found * Post-release 2023.02.20 (tardis-sn#2213) Automated changes for post-release 2023.02.20 * Correct the description of 'no_of_packets' in Monte Carlo Configuration (tardis-sn#2214) * Correct the description of 'no_of_packets' in Monte Carlo Configuration * Added a simple description * Pre-release 2023.02.26 (tardis-sn#2222) Automated changes for pre-release 2023.02.26 * Post-release 2023.02.27 (tardis-sn#2223) Automated changes for post-release 2023.02.27 * Add docstrings to subpackages (tardis-sn#2204) * add docstring to subpackage grid * Add docstrings to subpackages * Change comments to docstrings * add docstrings to subpackages * rename gui/__init__.py * Reformat using black * add contributor infos to mailmap file * add extended summary to docstrings * Add extended summary to plasma/properties * Update tardis/io/parsers/__init__.py Co-authored-by: Sona Chitchyan <[email protected]> --------- Co-authored-by: kim <[email protected]> Co-authored-by: Sona Chitchyan <[email protected]> * Docs Fix: Download Atom Data in rpacket_tracking.ipynb (tardis-sn#2236) Download atom data from the function * Fix for automerge (tardis-sn#2242) Use gh CLI to approve pull requests; use new token * Fix for release dates (tardis-sn#2243) * MonteCarlo packet progress bar completes to 100% (tardis-sn#2237) * Refresh packet progress bar after every iteration * Udpdated .mailmap * Reformatted with black * Fix team reviewers on workflows (tardis-sn#2246) * Pre-release 2023.03.20 (tardis-sn#2247) Automated changes for pre-release 2023.03.20 * Post-release 2023.03.20 (tardis-sn#2248) Automated changes for post-release 2023.03.20 * Create new workflow * Patch for arepo tests * Restore deleted parameter * Black format; Add missing skip reason * Fix typo in comment * Add more comments * Create slash command dispatcher * Changes to dispatcher * Black format --------- Co-authored-by: Sona Chitchyan <[email protected]> Co-authored-by: Satwik Kambham <[email protected]> Co-authored-by: Andrew <[email protected]> Co-authored-by: Christian Vogl <[email protected]> Co-authored-by: tardis-bot <[email protected]> Co-authored-by: Stuart Sim <[email protected]> Co-authored-by: gleck97 <[email protected]> Co-authored-by: ABHISHEK PATIDAR <[email protected]> Co-authored-by: Atharva Arya <[email protected]> Co-authored-by: Kim <[email protected]> Co-authored-by: Abhishek Patidar <[email protected]> Co-authored-by: Le Truong <[email protected]> Co-authored-by: kim <[email protected]> Co-authored-by: Shreyas Singh <[email protected]>
* Refresh packet progress bar after every iteration * Udpdated .mailmap * Reformatted with black
* Refresh packet progress bar after every iteration * Udpdated .mailmap * Reformatted with black
📝 Description
Type: 🪲
bugfix
The Monte-Carlo packet progress bar used to update during every iteration but did not complete to 100% once it was over. An update call needed to be included at the end of each iteration.
resolves
#2216📌 Resources
tqdm Docs
🚦 Testing
How did you test these changes?
Before:
After:
☑️ Checklist
build_docs
label