- Add support to ready HDF5 files created with very old versions of Carpet (< 2012).
- Python 3.12 is now supported, Python 3.8.1 is required for development.
total_filesize
now errors out when directories are passed.
- Added experimental support for reading OpenPMD files (with most of the heavy-lifting done by @krishivbhatia). Please, report any issue you might find.
- Minimum version of Python required is now 3.7.
kuibit
now explicitly follows NEP29. - Started gradual typing
- Now
SimDir
can be imported directly fromkuibit
(from kuibit import SimDir
) - Update logo to high resolution (and vector graphics)
- Added linear momentum lost by gravitational waves along the x and y directions (starting from a contribution by @konrad-topolski)
- Added
Tree
data structure - Added
effective_amplitude_spectral_density
withingw_utils
(starting from a contribution by @irrationalnumbers, #27) - Added fourth order accuracy in finite differences of grid functions
- Added
copy
to gravitational and electromagnetic waves - Added
crop
andcropped
to multipole data setup_matplotlib
now takes an optional parameterrc_param_file
to configure matplotlib using a file- Added computation of linear momentum lost by electromagnetic waves
- Added
rotation180_symmetry_undo
to undo rotational symmetries in grid data - Added
cactus_twopunctures
to read metadata from TwoPunctures - Added
local_maxima
andlocal_minima
to series - Added
mean
,average
,median
,std
reductions to series and grid data - Added
ah_available
,qlm_available
toOneHorizon
- Added
tensor
module - Added support to
surface*.vtk
fromQuasiLocalMeasures
QuasiLocalMeasures
has an option to output its variables on the horizon. Now,
kuibit
can read and parse them, so it is possible to plot horizon meshes and
variables onto the mesh.
kuibit.tensor
is a new module to provide high-level interfaces to work with
tensorial objects. A Tensor
can be built with collections of TimeSeries
,
FrequencySeries
, UniformGridData
, HierarchicalGridData
, or any other class
derived from BaseNumerical
. Tensor
s support all the mathematical operations
and inherit the methods from their contained object. At the moment, there are
two new subclasses of Tensor
that implement additional features for vector
calculus. For example, if bh_cen
is a Vector
with the time evolution of the
centroid of an horizon. bh_cen.differentiated().norm()
will be a TimeSeries
with the magnitude of the coordinate velocity as a function of time (as a
TimeSeries
).
Currently, the number of specialized methods in Vector
and Matrix
is not
large. Nonetheless, the infrastructure is in place and adding new will be
straightforward.
TwoPunctures
creates a metadata file that stores important physical
information about the initial data. The new module cactus_twopunctures
can
read this information and present it as a dictionary. If sim
is a
SimFactory
, sim.twopunctures
will be a dictionary-like object that has as
keys the various quantities saved by TwoPunctures
and as values, their values
as read from the TwoPunctures.bbh
file.
kuibit.tree
is a new module that can represent tree structures. At the moment,
it is main use is to work with timer trees.
kuibit.hor_utils
is a handy new module that implements common functions needed
when working with binary black holes. At the moment, the functions implemented
are:
compute_separation_vector
compute_separation
compute_center_of_mass
compute_angular_velocity_vector
- Fix passing an empty
ah_vars
toOneHorizon
. - Fix floating-point comparison in
grid_data
. - Fix optional positional arguments to
series._local_extrema
. - Fix algorithm to compute hash for
UniformGrid
. - Make classes that should not hashed unhashable.
GravitationalWaves
now find multipole variables that containpsi4
(as opposed to being identically toPsi4
)
- Add more updated sensitivity curve for Einstein Telescope (ET-D) (thanks, @bgiacoma, #33).
Scripts:
describe_simdir.py
interactive_timertree.py
print_available_iteration.py
optionally prints the corresponding timeplot_charge_phi1.py
plot_binary_ah_angular_velocity.py
plot_binary_ah_period.py
- Fix time incorrectly read in ASCII data (thanks @AuroraDysis, #30)
- Fix str representation of multipoles
- Fix implicit plotting of
Series
formatplotlib >= 3.5.2
- Fix
test_init
intest_cactus_grid_function
- Improvements to documentation and docstrings
- Added error in
_plot_horizon_on_plane
when the horizon cannot be plotted - Updated NumPy types (np.int -> int, np.float -> float)
- Windowing uneven signals is no longer allowed
- Correctly remove ghost zones for 1-2D HDF5 files
- Fix deprecation warning for Matplotlib 3.4
- Fix
is_masked
after removing a mask (thanks @ekwessel, #28) - Fix some information not being propagated by
grid_data_utils.merge_uniform_grids
.
- The
merge_refinement_levels
function inHierarchicalGridData
has been renamed torefinement_levels_merged
for consistency. (Imperative methods edit the object in-place)
Scripts:
plot_ah_trajectories.py
- Fixed
tikzplotlib
dependency forPython 3.6
- Examples with
plot_components_boundaries
now respect axes limits - Improved support to installing
mayavi
Python 3.10
is now supported (with exception ofnumba
)- Fixed parity in
reflection_symmetry_undo
h5py >= 3
is now supported
kuibit
tries to do as much lazy-loading as possible. For examples, files are
opened only when needed. When analyzing simulations it is useful to save the
work done by kuibit
to avoid re-doing the same operations over and over. It is
now possible to do this using pickle files. SimDir
can now be used as a
context manager and the progresses can be loaded and saved from files. For
example:
with SimDir("path_of_simulation", pickle_file="simdir.pickle") as sim:
# do operations
In this case, if pickle_file
exists, it will be loaded (ignoring all the other
arguments passed to SimDir
), and it will be kept updated with the additional
work done by kuibit
. If pickle_file
does not exist, the SimDir
will be
created as usual as a pickle_file
will be generated.
It is important to stress that, when using pickles, no consistency check with the current state of the simulation is performed. If the simulation changes (e.g., new checkpoints are added), this will result in errors. In that case, a new pickle file must be produced.
Numerical objects now support mask, which can be used to ignore part of the data that satisfy certain conditions (for example, to exclude the atmosphere from GRMHD computations).
Note that it is not possible to perform interpolation with masked data, so several methods will not work.
Note also that we mask only the data, not the independent coordinate (e.g., the
time in TimeSeries or the spatial coordinates in the UniformGridData). In case
you need masked coordinates too, you can use the mask
method to obtain an
array of booleans that identifies the valid data.
Series
,UniformGridData
,HierarhicalGridData
have a new methodis_masked
.Series
,UniformGridData
,HierarhicalGridData
have a new methodmask
that identifies where data is invalid.Series
,UniformGridData
,HierarhicalGridData
have news methods to create masked data (e.g.,mask_greater
). See complete list in documentation.Series
have new methodsmask_remove
andmask_removed
to create objects without masked data.Series
have new methodsmask_apply
andmask_applyed
to create objects with a given mask (as the one obtained with themask
method).
SimDir
can be saved to disk with the methodsave
and read with the functionload_SimDir
. This is useful to work with a simulation that has finished.- Examples can now use pickles.
- New CI workflow: linting.
- New
First Steps
documentation page. - When a release is published, its documentation is saved to
sbozzolo.github.io/kuibit/VERSION
time_at_maximum
andtime_at_minimum
inTimeSeries
can now take the optional argumentabsolute
.- Added
x_at_minimum_y
andx_at_maximum_y
toBaseNumerical
. - Added
coordinates_at_maximum
andcoordinates_at_minimum
for grid data. - Added
HierarchicalGridData.is_complex()
. - Added
tikz_clean_figure
tovisualize_matplotlib.save
, toargparse_helper.add_figure
, and to examples. This can be used to reduce the size of outputtikz
files. - Added
clear_cache
inOneGridFunction
. - Added
plot_contour
. - Added alias
time_found
toformation_time
in horizons. - Added
plot_components_boundaries
. - Added
ghost_zones_remove
inHierarchicalGridData
- Added
add_grid_structure_to_parser
. - Added
reflection_symmetry_undone
.
- The
ignore
parameter inSimDir
has been renamed toignored_dirs
. - The
trim_ends
parameter incactus_waves
is now set toFalse
by default.
plot_colorbar
does not steal axis focus anymore.- The legend in
plot_psi4_lm
was corrected. visualize_matplotlib.save
now correctly supports thefigure
argument.plot_strain_lm.py
no longer crashes whenwindow_args
is not provided.HierarchicalGridData
now owns the components.- Clear
OneGridFunction
cache ingrid_var
to avoid death by OOM. - Uniform constructor of
GridSeries
with constructors of otherSeries
. - Horizon properties now lead to valid python variable names.
Examples with --detector-num
now also accept --num-detector
as alias.
Scripts:
picklify.py
plot_1d_slice.py
plot_grid_expr.py
plot_phi_time_averaged.py
plot_gw_angular_momentum.py
print_grid_point_minmax.py
The visualize_matplotlib
module aims to simplify common visualization tasks
with matplotlib
. At the moment, it mainly supports visualizing grid data and
apparent horizons outlines. The public functions in visualize_matplotlib
try
to be as general as possible: if you pass some grid objects, they will try to
figure out how to plot it. Nonetheless, you should read the documentation and
the docstrings of the various functions.
Making movies is a critical step in analyzing a simulation. Now, kuibit
comes
with motionpicture, a Python tool
to assist you animate your data. motionpicture
provides all the infrastructure
needed to render multiple frames and glue them together, so, all you need to
worry is how to render one single frame. Importantly, motionpicture
supports
parallel rendering, which can dramatically speed up the time needed to produce a
video. Check out the
grid_var
example to see how easy it is to make a movie.
GridSeries
is a new class to describe 1D grid data. This class utilizes the
same infrastructure used by TimeSeries
and FrequencySeries
to represent a
single-valued function. UniformGridData
can be transformed into GridSeries
with the method to_GridSeries
. The main reason you would want to do this is
because GridSeries
are leaner and more direct to use.
- Improvements to documentation, docstrings, and tutorials
- Examples are now automatically packaged and uploaded upon release
- New YouTube series,
Using kuibit
Scripts:
plot_1d_vars.py
plot_ah_coordinate_velocity.py
plot_ah_found.py
plot_ah_radius.py
plot_ah_separation.py
plot_constraints.py
plot_em_energy.py
plot_grid_var.py
plot_gw_energy.py
plot_gw_linear_momentum.py
plot_physical_time_per_hour.py
plot_phi_lm.py
plot_psi4_lm.py
plot_strain_lm.py
plot_timeseries.py
plot_total_luminosity.py
print_qlm_properties_at_time.py
Movies:
grid_var
- Fixed header recognition for
carpet-grid.asc
(#22)
- New methods
get_apparent_horizon
andget_qlm_horizon
inHorizonsDir
.
- Fixed corner in
__str__
inUniformGrid
- Fixed
_finest_component_at_point_mapping
for some points for which floor and rounding lead to different results.
The argparse_helper
module collects functions to set up arguments for
command-line scripts. It comes with options for working with figure, grid data,
and horizons. Options can be stored in text files and read passing the path to
the -c
flag.
The function that finds the component corresponding to a given point in
HierarchicalGridData
was significantly sped up by adopting the algorithm used
in PostCactus
(developed by Wolfgang Kastaun). This new algorithm is
significantly faster, but it will not work in case the refinement factors across
different levels are not constant integers. In that case (e.g., the refinement
boundaries are at 1, 2, and 6), the older algorithm will be used. For large
towers of refinement levels and hundreds of MPI processes, the new algorithm is
orders of magnitude faster.
Now kuibit
comes with runnable examples. These are production-grade codes that
you can immediately use for your simulations. They are a great way to learn about
how to use kuibit
. The examples included are:
print_ah_formation_time.py
print_available_iterations.py
print_available_timeseries.py
save_resampled_grid_data.py
- Releases are now automatically pushed to PyPI.
- Added method to compute the linear momentum lost by gravitational waves
- Now the method
save
inUniformGridData
supports.npz
files. This is the recommend and fastest way to save aUniformGridData
to disk. - The function
load_UniformGridData
can now read.npz
files.
- Fixed bug that, under certain circumstances, resulted in
cactus_grid_function
not correctly indexing all the 3D data files - Fixed a test that was triggering the wrong error.
- Fixed a bug that made
ra_dec_to_theta_phi
depend on the local time
finest_level_component_at_point
is nowfinest_component_at_point
and returns directly the component asUniformGridData
as opposed to the refinement level and component number.
- Improvements to documentation and docstrings
- Added
nanmax
,nanmix
,abs_nanmax
,abs_nanmin
toBaseNumerical
- Added support for HDF5 grid arrays
- Added slicing
HierarchicalGridData
- Added
shape_time_at_iteration
incactus_horizon
- Added
shape_at_time
incactus_horizon
- Added
shape_outline_at_time
incactus_horizon
- Added
compute_horizons_separation
incactus_horizon
- Added
ignore_symlinks
toSimDir
cactus_horizons
andcactus_multiploes
now remove duplicate iterations
remove_duplicate_iters
was renamed toremove_duplicated_iters
_derive
methods are renamed to_differentiate
Initial release