Releases: radionets-project/pyvisgen
v0.3.0
Pyvisgen v0.3.0 (2025-07-02)
API Changes
Bug Fixes
-
Fix shape of
num_ifs
- Delete 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.Observation
methodscreate_rd_grid
andcreate_lm_grid
methods resulting in rotated images- Fix
pyvisgen.simulation.observation.ValidBaselineSubset
dataclass field order - Fix tests failing because of api change #39
- Fix
-
Fix image rotation caused by bug in rd/lm grid computation in
pyvisgen.simulation.observation.Obseravtion
- Fix field order in
pyvisgen.simulation.observation.ValidBaselineSubset
data class - Flip input image at the beginning of
pyvisgen.simulation.visibility.vis_loop
to ensure correct indexing, e.g. for plotting #40
- Fix field order in
-
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_grid
with used fov parameters.- Fixed missing images for the
lm_grid
in the docs. #63
- Fixed missing images for the
-
Add quick fix of the annoying import warning when using
tqdm.autonotbook
: Usetqdm.auto
instead. This does not create any warnings, as written in thetqdm
documentation (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
- New grid mode:
-
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_size
parameter to control memory consumption #33
-
Add class
Polarisation
topyvisgen.simulation.visibility
that is called invis_loop
- Added linear, circular, and no polarisation options
- Update
pyvisgen.simulation.visibility.Visibilities
dataclass to also store polarisation degree tensors - Add 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 apd.DataFrame
#46 -
Add docs #47
-
Added 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.ipynb
containing full code for the user guide entry - Change 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 example notebook
-
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.yml
andworkflow.yml
for node20 #28
-
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.Visibilities dataclass 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
- Change indices for stokes components according to AIPS Memo 114
-
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.SimulateDataSet
- Accessible 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.gridding
module by adding autils
submodule that contains all utility functions that previously were in thegridder
submodule- Also fix parts of the utility functions
- Update and fix tests #53
-
Add/update docstrings throughout the codebase #54
-
Remove
torch.flip
call invisibility.py
- Change dense UV grid creation to use
numpy.float128
and convert totorch.float64
afterwards to fix numerical instabilities - Change integration in
scan.py
to returnint_f
instead ofint_t
, removed time integration - Exclude dense calculations from code coverage due to lack of GPU computations in GitHub actions #56
- Change dense UV grid creation to use
-
Fix docs index and readme text #60
-
Add linting CI job
- Fix attribute error in
pyvisgen.simulation
#67
- Fix attribute error in
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.layout
instead of passing the layout name separately inpyvisgen.fits.writer.create_vis_hdu
#38 -
Added optional
normalize
parameter topyvisgen.visibility.vis_loop
to decide whether to apply a normalization multiplier of0.5
(default: True) #43 -
Remove reading of layout files relative to :mod:
pyvisgen.layouts.layout
- Move layout files to external resources directory that is shipped with
the distribution - Ship default config with distribution #73
- Move layout files to external resources directory that is shipped with
v0.2.0
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)
- refactor baseline calculations by replacing loops with pytorch built-in methods #28