- edited description
Inclusion of kuibit
kuibit is a Python package for post-processing simulations. The tool comes with several features for analysis and visualization. For some of the most common operations (e.g., 2D plot of a grid variable, extraction of gravitational waves, ...), users can directly obtain the result without writing any code. The number of such ready-made scripts grows with every release of kuibit. For everything else, kuibit has a large number of features (https://sbozzolo.github.io/kuibit/features.html) that can be used in scripts or notebooks.
kuibit is designed to be user-friendly: it has rich documentation (https://sbozzolo.github.io/kuibit/) examples ready to be used, and tutorials. kuibit is also designed to be developer- and maintainer- friendly: it is thoroughly commented, and it implements several continuous integration pipelines to test, document, and publish the package automatically. The high quality of kuibit is also recognized by its publication in the Journal of Open Source Software (https://joss.theoj.org/papers/10.21105/joss.03099)
kuibit is largely inspired by Wolfgang Kastaun's PyCactus. kuibit shares the same overall design with PyCactus, and in some cases, the implementation details too. kuibit would not exist without PyCactus.
As far as I know, 5-10 people are actively using kuibit as their main tool to interface with the output of simulations. The feedback I got is overwhelmingly positive: users that are new to the Einstein Toolkit praise the simplicity of use and the comfort of working in Python; experienced users claim that kuibit allows them to focus on the science instead of the technical details.
kuibit has already been used for publications, see https://inspirehep.net/literature?sort=mostrecent&size=25&page=1&q=refersto%3Arecid%3A1858070.
kuibit repo: https://github.com/Sbozzolo/kuibit
Comments and feedback are welcomed.
Comments (28)
-
-
- changed milestone to ET_2021_11
-
reporter - edited description
-
- changed status to open
-
Reviewer: Yosef Zlochower
-
reporter -
reporter How would kuibit be distributed with the Einstein Toolkit? Would users have to install it with pip? Would the repo be included?
It would be nice to distribute the repo because they contain the examples, which, in my opinion, are the fastest way for new users to start visualizing their simulations. On the flip side, installing with
pip kuibit
is the easiest way to obtain a working copy of kuibit.
Also, I wrote a page (first steps) to introduce users to kuibit. I don’t know if it is useful or not, so @Yosef Zlochower , if you have no prior experience with kuibit, feedback on the on-boarding process would be appreciated!
-
Any updates on this?
-
Yosef will try and review starting Sunday (http://lists.einsteintoolkit.org/pipermail/users/2021-October/008279.html).
-
I ran into issues with the online documentation. https://sbozzolo.github.io/kuibit/recommendation_examples.html
The link https://github.com/sbozzolo/kuibit/releases/latest/download/examples.tar.gz doesn’t go to a valid file. I tried downloading the latest examples, but got the error “AttributeError: module 'kuibit.argparse_helper' has no attribute 'add_grid_structure_to_parser'“
-
reporter Thanks for pointing out the broken link. It will be automatically fixed upon release of version 1.3.0 (version 1.2.1 didn’t go through the continuous delivery pipeline, so the example tarball was not generated).
How did you download the example? If I look at the files in the archive for version 1.2.0, no one calls
add_grid_strcture_to_parser
(which was introduced later).
-
I was getting the examples from git directly
-
reporter In that case, you should get
kuibit
from git directly as well.pip install git+https://github.com/Sbozzolo/kuibit.git
should work -
reporter After the call this morning, I took the following step:
- Update the CI/CD pipeline. Now, when a release is tagged on GitHub, the documentation is archived to sbozzolo.github.io/kuibit/VERSION. Hence, it will be always possible to refer to the documentation for a specific stable version. sbozzolo.github.io/kuibit/ will point to the documentation generated from master. This will be the latest stable. sbozzolo.github.io/kuibit/dev will be the documentation from the next version.
- Tagged a new release, 1.3.0. Hopefully, things should be working as expected now. It is on PyPi.
If installed with pip, kuibit should bring all the dependencies with it EXCEPT:
- numba (optially needed to compute mismatch between gravitational waves)
- pycbc, lalsuite (optially needed to test mismatch between gravitational waves)
- mayavi
mayavi is used in some examples for 3D rendering. However, the project does not seem maintained anymore and it not really compatible with recent versions of Python/vtk. mayavi is a dependency in the next version kuibit, but this might change in the future.
The following is an idea for distributing kuibit with the upcoming release of the Einstein Toolkit. If GetComponent can checkout a specific commit/tag, it can be used to download the kuibit repo for version 1.3.0. The main advantage of this is that users would have immediately all the examples on their machine. The examples are scripts that can be used to make plots and analysis without writing any code. Therefore, I think that they would be very useful for beginners. Then, users should install kuibit 1.3.0 with
pip install --user kuibit==1.3.0
. We can optionally recommend users to add CACTUS/kuibit/examples/bin to their PATH, so that making some plots becomes very easy. When a new version of kuibit is released, users can update it with pip and update the examples checking out the corresponding tag (if they wish to do so). The link to the documentation will be sbozzolo.github.io/kuibit/1.3.0
-
Current version may not build if user hasn’t separately installed hdf5 build environment (h5py usually can install without this). Can we add examples showing how to make 2D figures like BNS movie in gallery?
-
A bit late but here’s a pull request that installs parts of kuibit into
utils/Analysis/kuibit
(same location as POWER got installed to): https://bitbucket.org/einsteintoolkit/manifest/pull-requests/10/einsteintoolkitth-add-parts-of-kuibit-toI added kubit’s source code as well just so that is there (and in case users already have the prereqs installed eg on their laptops) but my recollection was that either:
pip install git+https://github.com/Sbozzolo/kuibit.git@1.3.0
or (eventually):
pip install git+https://github.com/Sbozzolo/kuibit.git@ET_2021_11
to have all prerequisites installed (note the
@
sign to specify the tagged version to get).For the new user notebook we can provide a list of OS package manager packages to install to be able to use kuibit from the copy in the ET.
-
@Gabriele Bozzola for inclusion in in the ET, at least one of the ET maintainers (http://einsteintoolkit.org/maintainers-credits.html) should have write permission to the repository. Is that already the case? In this case @Steven R. Brandt may be the best person to give access to since he is release mananger ie will have to create tags or ensure that they have been created otherwise.
-
reporter @Gabriele Bozzola
for inclusion in in the ET, at least one of the ET maintainers (http://einsteintoolkit.org/maintainers-credits.html) should have write permission to the repository. Is that already the case? In this case
@Steven R. Brandt
may be the best person to give access to since he is release mananger ie will have to create tags or ensure that they have been created otherwise.
You are Steven were invited to join the GitHub repo.
Current version may not build if user hasn’t separately installed hdf5 build environment (h5py usually can install without this).
This comes from the fact that
kuibit
requiresh5py < 3
at the moment. I am trying to relax this assumption, but the dependency solver goes crazy. I will have to fiddle around to find a way out of this. In case, I will push a version 1.3.1 to fix this.Can we add examples showing how to make 2D figures like BNS movie in gallery?
I can help those that are running the gallery examples to make visualizations with
kuibit
. For example, you should be able to make the 2D movie we have in the gallery withkuibit
without writing any single line of code:mopi -m examples/mopi_movies/grid_var --resolution 500 --plane xy --variable rho_b --colorbar --datadir simulation --interpolation-method bicubic --logscale --vmin -7 --vmax -1 --parallel --outdir movie -x0 -30 -30 -x1 30 30
I added kubit’s source code as well just so that is there (and in case users already have the prereqs installed eg on their laptops) but my recollection was that either:
Correct, it is not trivial to install kuibit directly from the repo (one needs `poetry`, and even then, it is still not simple). The best way is with pip. This also simplifies upgrading
kuibit
.Hence, we should provide instructions to download
kuibit
with pip and a link to the documentation relative to the version.For the new user notebook we can provide a list of OS package manager packages to install to be able to use kuibit from the copy in the ET.
Unless I fail to work around the h5py problem, I think and hope that no extra package should be required, unless one wants to do 3D rendering with
mayavi
.
I can also give a tutorial on
kuibit
at some point. -
reporter I fixed the issue with
h5py
inkuibit
1.3.1, which I have just released. -
Thornlist changes applied as git hash 3eb5ad9 "einsteintoolkit.th: add parts of kuibit to checkout" of manifest
-
-
assigned issue to
-
assigned issue to
-
You can request up to one (not a hard rule but strongly encouraged) citations that people should use when using RePrimAnd, as well as multiple (any number, but you may provide indication under which circumstances which ones are suggested) suggested citations. Those will be listed on: https://www.einsteintoolkit.org/citation.html
To provide the citation please provide bibtex entries to be included in einsteintoolkit.bib (in the manifest repo) that should look something like this:
@Misc{Kranc:web, suggested-for ="McLachlan/ML_BSSN", key = {Kranc}, title = {{Kranc}: {Kranc} Assembles Numerical Code}, url = {http://kranccode.org/}, } @Misc{EinsteinToolkit:2021_05, requested-for ={EinsteinToolkit}, author = {Zachariah Etienne and Steven R. Brandt and Peter Diener and William E. Gabella and Miguel Gracia-Linares and Roland Haas and Atul Kedia and Miguel Alcubierre and Daniela Alic and Gabrielle Allen and Marcus Ansorg and Maria Babiuc-Hamilton and Luca Baiotti and Werner Benger and Eloisa Bentivegna and Sebastiano Bernuzzi and Tanja Bode and Gabriele Bozzola and Brockton Brendal and Bernd Bruegmann and Manuela Campanelli and Federico Cipolletta and Giovanni Corvino and Samuel Cupp and Roberto De Pietri and Harry Dimmelmeier and Rion Dooley and Nils Dorband and Matthew Elley and Yaakoub El Khamra and Joshua Faber and Toni Font and Joachim Frieben and Bruno Giacomazzo and Tom Goodale and Carsten Gundlach and Ian Hawke and Scott Hawley and Ian Hinder and E. A. Huerta and Sascha Husa and Sai Iyer and Daniel Johnson and Thorsten Kellermann and Andrew Knapp and Michael Koppitz and Pablo Laguna and Gerd Lanferman and Frank L{\"o}ffler and Joan Masso and Lars Menger and Andre Merzky and Jonah Maxwell Miller and Mark Miller and Philipp Moesta and Pedro Montero and Bruno Mundim and Andrea Nerozzi and Scott C. Noble and Christian Ott and Ravi Paruchuri and Denis Pollney and David Radice and Thomas Radke and Christian Reisswig and Luciano Rezzolla and David Rideout and Matei Ripeanu and Lorenzo Sala and Jascha A Schewtschenko and Erik Schnetter and Bernard Schutz and Ed Seidel and Eric Seidel and John Shalf and Ken Sible and Ulrich Sperhake and Nikolaos Stergioulas and Wai-Mo Suen and Bela Szilagyi and Ryoji Takahashi and Michael Thomas and Jonathan Thornburg and Malcolm Tobias and Aaryn Tonita and Paul Walker and Mew-Bing Wan and Barry Wardell and Leonardo Werneck and Helvi Witek and Miguel Zilh{\~a}o and Burkhard Zink and Yosef Zlochower}, title = {The Einstein Toolkit}, month = may, year = 2021, note = {To find out more, visit http://einsteintoolkit.org}, publisher = {Zenodo}, version = {The "Lorentz" release, ET\_2021\_05}, doi = {10.5281/zenodo.4884780}, url = {https://doi.org/10.5281/zenodo.4884780} } @article{Noble:2005gf, requested-for = {WVUThorns/IllinoisGRMHD}, author = "Noble, Scott C. and Gammie, Charles F. and McKinney, Jonathan C. and Del Zanna, Luca", title = "{Primitive variable solvers for conservative general relativistic magnetohydrodynamics}", journal = "Astrophys. J.", volume = "641", pages = "626-637", doi = "10.1086/500349", year = "2006", eprint = "arXiv:astro-ph/0512420", SLACcitation = "%%CITATION = ASTRO-PH/0512420;%%", }
the preferred entry format is SPIRES-like, in that SPIRES keys are strongly recommended but we list all authors. The top of einsteintoolkit.th explains the convention: https://bitbucket.org/einsteintoolkit/manifest/raw/master/einsteintoolkit.bib
-
reporter You can use this citation key:
@article{Bozzola:2021hus, requested-for = {kuibit}, author = "Bozzola, Gabriele", title = "{kuibit: Analyzing Einstein Toolkit simulations with Python}", eprint = "2104.06376", archivePrefix = "arXiv", primaryClass = "gr-qc", doi = "10.21105/joss.03099", journal = "J. Open Source Softw.", volume = "6", number = "60", pages = "3099", year = "2021" }
kuibit
relies uponnumpy
,scipy
, andh5py
@article{Harris:2020xlr, suggested-for = {kuibit}, author = {Charles R. Harris and K. Jarrod Millman and St{\'{e}}fan J. van der Walt and Ralf Gommers and Pauli Virtanen and David Cournapeau and Eric Wieser and Julian Taylor and Sebastian Berg and Nathaniel J. Smith and Robert Kern and Matti Picus and Stephan Hoyer and Marten H. van Kerkwijk and Matthew Brett and Allan Haldane and Jaime Fern{\'{a}}ndez del R{\'{i}}o and Mark Wiebe and Pearu Peterson and Pierre G{\'{e}}rard-Marchant and Kevin Sheppard and Tyler Reddy and Warren Weckesser and Hameer Abbasi and Christoph Gohlke and Travis E. Oliphant}, title = "{Array programming with NumPy}", eprint = "2006.10256", archivePrefix = "arXiv", primaryClass = "cs.MS", doi = "10.1038/s41586-020-2649-2", journal = "Nature", volume = "585", number = "7825", pages = "357--362", year = "2020" } @article{Virtanen:2019joe, suggested-for = {kuibit}, author = {Virtanen, Pauli and Gommers, Ralf and Oliphant, Travis E. and Haberland, Matt and Reddy, Tyler and Cournapeau, David and Burovski, Evgeni and Peterson, Pearu and Weckesser, Warren and Bright, Jonathan and {van der Walt}, St{\'e}fan J. and Brett, Matthew and Wilson, Joshua and Millman, K. Jarrod and Mayorov, Nikolay and Nelson, Andrew R. J. and Jones, Eric and Kern, Robert and Larson, Eric and Carey, C J and Polat, {\.I}lhan and Feng, Yu and Moore, Eric W. and {VanderPlas}, Jake and Laxalde, Denis and Perktold, Josef and Cimrman, Robert and Henriksen, Ian and Quintero, E. A. and Harris, Charles R. and Archibald, Anne M. and Ribeiro, Ant{\^o}nio H. and Pedregosa, Fabian and {van Mulbregt}, Paul and {SciPy 1.0 Contributors}}, title = "{SciPy 1.0--Fundamental Algorithms for Scientific Computing in Python}", eprint = "1907.10121", archivePrefix = "arXiv", primaryClass = "cs.MS", doi = "10.1038/s41592-019-0686-2", journal = "Nature Meth.", volume = "17", pages = "261", year = "2020" }
Unfortunately, h5py does not have a recommended citation.
-
Thank you. You can certainly add the scipy and numpy citations as suggested ones. If you do list citations for kuibit’s dependencies (typically not done, those dependenicies would have their own list) you may also consider the matplotlib citation (which they actually request, https://matplotlib.org/3.1.1/citing.html):
@Article{Hunter:2007, Author = {Hunter, J. D.}, Title = {Matplotlib: A 2D graphics environment}, Journal = {Computing in Science \& Engineering}, Volume = {9}, Number = {3}, Pages = {90--95}, abstract = {Matplotlib is a 2D graphics package used for Python for application development, interactive scripting, and publication-quality image generation across user interfaces and operating systems.}, publisher = {IEEE COMPUTER SOC}, doi = {10.1109/MCSE.2007.55}, year = 2007 }
though the entry itself already exists in einsteintoolkit.bib. Usually the suggested citations are secondary publications or publications that describe specific aspects that not all users will use.
Independent of this, adding the numpy and scipy entries (with or without suggested-for) to einsteintoolkit.bib seems like a good idea. Thanks for looking them up.
-
-
reporter Usually the suggested citations are secondary publications or publications that describe specific aspects that not all users will use.
I see. Without
numpy
,scipy
, andh5py
,kuibit
would not exist. Therefore, I personally always cite them, and I would recommend anyone that useskuibit
to do the same. (`matplotlib` is not as important inkuibit
: you can use 95 % of the available features without it and use your preferred plotting library instead) -
It’s not super important (since kuibit is analysis not ET thorn) you may consider to hook yourself up to the ET commits mailing list (like the ET thorns do) by setting up commits@einsteintoolkit.org as the recipient of push event emails in https://github.com/GITHUB_USER_NAME/REPO_NAME/settings/notifications/edit .
-
- changed status to resolved
Now part of the ET
- Log in to comment