Change Log#
Pyvisgen 0.7.1 (2025-12-11)#
API Changes#
Bug Fixes#
New Features#
Maintenance#
Refactoring and Optimization#
Pyvisgen 0.7.0 (2025-12-10)#
API Changes#
Bug Fixes#
Changed indexing of UV and RD grid calculations using torch.meshgrid to xy instead of ij. This avoids confusion between x and y systems and row and column systems and fixes the long-standing issue of inverted and rotated visbilities. [#103]
Fixed a bug which raised an AttributeError when using a
tensor()in anSkyCoordobject [#110]
New Features#
Enhanced dropping of
station_namecolumn insrc/pyvisgen/layouts/layout.pyReworked scan calculation using
Scandataclass, which stores start time, end time, integration time and seperation for each scan. This allows the usage of arrays asscan_seperation,scan_durationandintegration_time. That way it is now possible to replicate the (u,v) space calculation of a real measurement.Enhanced docstrings for Observation class by adding units to the physical quantities. [#94]
Added
cufinufftbackend for faster visibility calculations [#101]Removed gridding methods and replace it with [
pyvisgrid](radionets-project/pyvisgrid)Added
pyvisgridas dependencyMoved the dataset creation, utility methods and scripts to the new
pyvisgen.datasetmodule.Fixed typo
sensitivty_cutfor dataset config [#105]Added plugin support to pyvisgen, allowing external gridder plugins to be used inside the simulation loop [#108]
Added new config system based on pydantic
Added contextmanager-based file writing to
pyvisgen.dataset.dataset[#117]Added PTWriter class for saving data in PyTorch (.pt) format [#118]
Added optional CodeCarbon tracker to pyvisgen [#119]
Added a WebDataset writer to the available data writers of pyvisgen [#122]
Added new main CLI tool merging the old
pyvisgen-simulateandpyvisgen-quickstartcommands into one tool that can be accessed through the newpyvisgencommand (see$ pyvisgen --help). [#123]Added Fourier transform option to configuration system, that allows changing the Fourier transform for the simulation [#127]
Maintenance#
Refactoring and Optimization#
Pyvisgen 0.5.0 (2025-08-19)#
API Changes#
Bug Fixes#
New Features#
Maintenance#
Replaced all uses of
tqdmwith a multi-progress bar system usingrich.progressAdded rich traceback for improved error reporting
Changed the config option
file_prefixtodataset_typethroughout the codebase and in the default config for clarity and better readabilityUpdated the device key value in the default config from
"cpu"to"cuda", CUDA is considered default from now onAdded
rich-clickas new dependency and replacedclickwithrich_clickfor improved CLI appearanceRefactored
load_bundles()to directly filter HDF5 files bydataset_type(usingpathlib.Path.glob)Removed obsolete
pyvisgen.utils.get_bundles()function [#102]
Refactoring and Optimization#
Pyvisgen v0.4.0 (2025-08-05)#
API Changes#
Bug Fixes#
New Features#
Added a new setup_logger function in {mod}`pyvisgen.utils`
Added logging throughout the codebase
Replaced bare prints with LOGGER.info or LOGGER.warning for better status messages
Added exception logging before raising an exception, providing better tracebacks and error context [#98]
Maintenance#
Updated most of the docs to use myst parser
Updated user guide
Updated developer guide
Added contribution guide
Added coding style guide
Added “Cite Us” page [#96]
Refactoring and Optimization#
Pyvisgen v0.4.0 (2025-08-05)#
API Changes#
Bug Fixes#
New Features#
Maintenance#
Refactoring and Optimization#
Pyvisgen v0.3.0 (2025-07-02)#
API Changes#
Bug Fixes#
Fix shape of
num_ifsDelete additional bin in masking
Fix ra dec bug [#25]
Fix baseline num calculation
Fix wavelength scaling
Fix lm grid calculation
Fix gridding so that it fits the numpy fft gridding [#28]
Fix a numerical issue in the lm grid calculation, caused by adding a big number to small values in the lm grid
Use torch.float64 for rd grid and lm grid calculation [#32]
Fix gridding in
pyvisgen.simulation.observation.Observationmethodscreate_rd_grid()andcreate_lm_grid()methods resulting in rotated imagesFix
pyvisgen.simulation.observation.ValidBaselineSubsetdataclass field orderFix tests failing because of api change [#39]
Fix image rotation caused by bug in rd/lm grid computation in
pyvisgen.simulation.observation.ObservationFix field order in
pyvisgen.simulation.observation.ValidBaselineSubsetdata classFlip input image at the beginning of
pyvisgen.simulation.visibility.vis_loop()to ensure correct indexing, e.g. for plotting [#40]
Fixed random number drawing in tests by changing the location of the seed override [#44]
Update the order of simulated bandwidths in the fits writer to the standard found from converted MeerKat observations
Tried to fix polarisation infos antenna hdu [#49]
Fix bug in feed rotation/parallactic angle computation in RIME [#57]
Fix observation dec not on same device as r [#62]
examples/ideal_interferometer.ipynb: Added a new code cell to create anlm_gridwith used fov parameters.Fixed missing images for the
lm_gridin the docs. [#63]
Add quick fix of the annoying import warning when using
tqdm.autonotbook(): Usetqdm.auto()instead. This does not create any warnings, as written in thetqdmdocumentation (https://tqdm.github.io/docs/shortcuts/#tqdmauto). [#65]
New Features#
Implement GPU support for visibility calculations
New grid mode:
When more than one visibility falls into the same pixel, only the first is calculated
Define grid before calculation
New dense mode:
Calculate visibilities for a dense uv grid
Simulate ideal interferometer response
Add sensitivity cut in image space:
Avoid calculation of pixel values below detection threshold
Significantly speed-up simulations
Add torch compile to RIME functions [#28]
Changes to
vis_loop()function invisibility.py:Add a an optional tqdm progress bar to get a visual confirmation the calculation is still running
Add optional
batch_sizeparameter to control memory consumption [#33]
Add class
Polarizationtopyvisgen.simulation.visibilitythat is called invis_loop()Add linear, circular, and no polarisation options
Update
pyvisgen.simulation.visibility.Visibilitiesdataclass to also store polarisation degree tensorsAdd keyword arguments for polarisation simulation to pyvisgen.simulation.observation.Observation class
Add parallactic angle computation [#39]
pyvisgen.layouts.get_array_layout()now also accepts custom layouts stored in apandas.DataFrame[#46]Add docs [#47]
Add optional auto scaling for batchsize in vis_loop [#48]
Add new gridder that can handle vis data returned by the
vis_loop()[#53]Add ideal interferometer simulation guide to documentation (in User Guide)
Add example notebook
ideal_interferometer.ipynbcontaining full code for the user guide entryChange primary and primary highlight colors for light theme in _static/pyvisgen.css to darker greens to be more visible
Change maintainers in
pyproject.toml[#58]
Add DSA-2000 layouts [#61]
Add new quickstart CLI tool that creates a copy of the default configuration at the specified path [#73]
Maintenance#
Update readme [#26]
Add docstrings - Delete unused files [#27]
Delete unused code and relicts
Change from numpy arrays to torch tensors
Change some of the keywords to more common phrases inside the toml config
Update default data_set.toml
Delete old config examples
Avoid torch einsum for better readability of the code
Update
ci.ymlandworkflow.ymlfor node20 [#28]
Add missing changelog [#29]
Use observation class to pass sampling options to the fits writer
Include writer in tests [#31]
Use c from scipy in scan.py [#32]
Switch from setup.py to pyproject.toml [#35]
Fix package name and url in pyproject.toml
Remove obsolete setup.py
Fix setuptools find packages path in pyproject.toml
Fix formatting of
pyproject.toml[#36]
Create new dev environment file that contains pytorch-gpu and pytorch-cuda [#37]
Change
pyvisgen.simulation.visibility.Visibilitiesdataclass component names from stokes components (I , Q, U, and V) to visibilities constructed from the stokes components (V_11, V_22, V_12, V_21)Change indices for stokes components according to AIPS Memo 114
Indices will be set automatically depending on simulated polarisation
Update comment strings in FITS files
Update docstrings accordingly in
pyvisgen.simulation.visibility.vis_loop()andpyvisgen.simulation.observation.Observation[#39]
Switch README to reStructuredText
Add Codecov badge [#45]
Drop integration time in fits writer (also missing fits files which are converted from ms files)
Update saving of visibility dates to modern standards
Use infos from observation class [#49]
Increase verbosity of tests in CI [#50]
Complete rewrite of dataset creation routine
pyvisgen.simulation.data_set.SimulateDataSetAccessible using a classmethod to load a config file
Add optional multithreading support
Draw and fully test parameters before simulation loop. Previously this was done in the loop and tests were only performed for two time steps
Support for polarization
Add new default config file for new dataset creation routine
Update CLI tool for dataset creation routine
Allow passing HDF5 key in
pyvisgen.utils.data.open_bundles()Restructure
pyvisgen.griddingmodule by adding autilssubmodule that contains all utility functions that previously were in thegriddersubmoduleAlso fix parts of the utility functions
Update and fix tests [#53]
Add/update docstrings throughout the codebase [#54]
Remove
torch.flip()call invisibility.pyChange dense UV grid creation to use
numpy.float128()and convert totorch.float64()afterwards to fix numerical instabilitiesChange integration in
scan.pyto returnint_finstead ofint_t, removed time integrationExclude dense calculations from code coverage due to lack of GPU computations in GitHub actions [#56]
Fix docs index and readme text [#60]
Add linting CI job
Fix attribute error in
pyvisgen.simulation[#67]
Refactoring and Optimization#
Refactor data classes (Visibilities, Baselines)
Add observation class, which holds all relevant information
Drop scan-wise splitting in visibilities calculations, but split all valid baselines equally
Refactor RIME components (currently only uncorrupted available)
Refactor baseline calculations by replacing loops with pytorch built-in methods [#28]
Improve hour angle calculation via array-wise operations [#30]
Use
obs.layoutinstead of passing the layout name separately inpyvisgen.fits.writer.create_vis_hdu()[#38]Added optional
normalizeparameter topyvisgen.visibility.vis_loop()to decide whether to apply a normalization multiplier of0.5(default:True) [#43]Remove reading of layout files relative to
pyvisgen.layouts.layoutMove layout files to external resources directory that is shipped with the distribution
Ship default config with distribution [#73]
Pyvisgen v0.2.0 (2024-06-12)#
API Changes#
Bug Fixes#
Fix baseline num calculation
Fix wavelength scaling
Fix lm grid calculation
Fix gridding so that it fits the numpy fft gridding [#28]
New Features#
Implement GPU support for visibility calculations
New grid mode:
When more than one visibility falls into the same pixel, only the first is calculated
Define grid before calculation
New dense mode:
Calculate visibilities for a dense uv grid
Simulate ideal interferometer response
Add sensitivity cut in image space:
Avoid calculation of pixel values below detection threshold
Significantly speed-up simulations
Add torch compile to RIME functions [#28]
Maintenance#
Delete unused code and relicts
Change from numpy arrays to torch tensors
Change some of the keywords to more common phrases inside the toml config
Update default data_set.toml
Delete old config examples
Avoid torch einsum for better readability of the code [#28]
Refactoring and Optimization#
Refactor data classes (Visibilities, Baselines)
Add observation class, which holds all relevant information
Drop scan-wise splitting in visibilities calculations, but split all valid baselines equally
Refactor RIME components (currently only uncorrupted available) [#28]
Refactor baseline calculations by replacing loops with pytorch built-in methods
Pyvisgen v0.1.4 (2023-11-09)#
API Changes#
Bug Fixes#
Fix shape of
num_ifsDelete additional bin in masking
Fix ra dec bug [#25]
New Features#
Update ci:
Change conda to mamba
Install towncrier [#24]