xradio 1.1.0__py3-none-any.whl → 1.1.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -29,6 +29,24 @@ except ModuleNotFoundError as exc:
29
29
  f"{exc}"
30
30
  )
31
31
 
32
+ # Valid casacore ImageInfo enum values
33
+ # Reference: https://casacore.github.io/casacore/classcasacore_1_1ImageInfo.html
34
+ _VALID_IMAGE_TYPES = (
35
+ "Undefined",
36
+ "Intensity",
37
+ "Beam",
38
+ "ColumnDensity",
39
+ "DepolarizationRatio",
40
+ "KineticTemperature",
41
+ "MagneticField",
42
+ "OpticalDepth",
43
+ "RotationMeasure",
44
+ "RotationalTemperature",
45
+ "SpectralIndex",
46
+ "Velocity",
47
+ "VelocityDispersion",
48
+ )
49
+
32
50
  import numpy as np
33
51
  import toolviper.utils.logger as logger
34
52
 
@@ -166,6 +184,32 @@ def wrap_class_methods(cls: type) -> type:
166
184
  return cls
167
185
 
168
186
 
187
+ def _validate_image_type(value: str) -> str:
188
+ """Validate and normalize an image type string.
189
+
190
+ Parameters
191
+ ----------
192
+ value
193
+ The image type string to validate.
194
+
195
+ Returns
196
+ -------
197
+ str
198
+ A valid casacore ImageInfo enum value with proper capitalization.
199
+ Returns 'Intensity' if the input is not a valid type.
200
+
201
+ Notes
202
+ -----
203
+ Validation is case-insensitive. The returned string uses the
204
+ canonical capitalization from the casacore ImageInfo enum.
205
+ """
206
+ value_lower = value.lower()
207
+ for valid_type in _VALID_IMAGE_TYPES:
208
+ if valid_type.lower() == value_lower:
209
+ return valid_type
210
+ return "Intensity"
211
+
212
+
169
213
  @wrap_class_methods
170
214
  class table(casatools.table):
171
215
  """A wrapper for the casatools table object.
@@ -513,7 +557,7 @@ class image(casatools.image):
513
557
  self,
514
558
  imagename,
515
559
  axis=0,
516
- maskname="mask_0",
560
+ maskname="MASK_0",
517
561
  images=(),
518
562
  values=None,
519
563
  coordsys=None,
@@ -702,18 +746,36 @@ class image(casatools.image):
702
746
  def imageinfo(self) -> dict:
703
747
  """Retrieve metadata from the image table.
704
748
 
705
- This method accesses the image table associated with the image name
706
- and attempts to retrieve information stored under the 'imageinfo'
707
- keyword. If the 'imageinfo' keyword is not found in the table,
708
- a default dictionary containing basic information is returned.
749
+ Accesses the image table and retrieves information stored under the
750
+ 'imageinfo' keyword. The 'imagetype' value is validated against
751
+ casacore's ImageInfo enumeration values to mimic python-casacore
752
+ `image.imageinfo()` behavior.
709
753
 
710
754
  Returns
711
755
  -------
712
756
  dict
713
- A dictionary containing image metadata. This is either the
714
- value associated with the 'imageinfo' keyword in the table,
715
- or a default dictionary {'imagetype': 'Intensity',
716
- 'objectname': ''} if the keyword is absent.
757
+ Image metadata dictionary containing:
758
+
759
+ - **imagetype** : str
760
+ Type of the image, validated against casacore ImageInfo enum.
761
+ Defaults to 'Intensity' if invalid or missing.
762
+ - **objectname** : str
763
+ Name of the observed object.
764
+
765
+ Notes
766
+ -----
767
+ image.info()['imageinfo'] and image.imageinfo() from python-casacore
768
+ always returns "imagetype" in a predefined enum value. When the "imageinfo"
769
+ keyword is missing from the image table, or a non-standard value of "imagetype"
770
+ (e.g. 'sky') was written into that keyword, image.info() will just return
771
+ "Intensity" as the imagetype.
772
+
773
+ Examples
774
+ --------
775
+ >>> img = image('my_image.im')
776
+ >>> info = img.imageinfo()
777
+ >>> info['imagetype']
778
+ 'Intensity'
717
779
  """
718
780
  with table(self._imagename) as tb:
719
781
  if "imageinfo" in tb.keywordnames():
@@ -721,6 +783,10 @@ class image(casatools.image):
721
783
  else:
722
784
  image_metadata = {"imagetype": "Intensity", "objectname": ""}
723
785
 
786
+ image_metadata["imagetype"] = _validate_image_type(
787
+ image_metadata.get("imagetype", "Intensity")
788
+ )
789
+
724
790
  return image_metadata
725
791
 
726
792
  def datatype(self):
@@ -217,7 +217,7 @@ def _add_sky_or_aperture(
217
217
  img_full_path: str,
218
218
  has_sph_dims: bool,
219
219
  history: bool,
220
- image_type: str = "SKY",
220
+ image_type: str,
221
221
  ) -> xr.Dataset:
222
222
  xda = xr.DataArray(ary, dims=dimorder).astype(ary.dtype)
223
223
  with _open_image_ro(img_full_path) as casa_image:
@@ -270,8 +270,6 @@ def _casa_image_to_xds_attrs(img_full_path: str) -> dict:
270
270
  """
271
271
  with _open_image_ro(img_full_path) as casa_image:
272
272
  meta_dict = casa_image.info()
273
- # print("meta_dict:", meta_dict)
274
- # print("***********")
275
273
  coord_dict = copy.deepcopy(meta_dict["coordinates"])
276
274
  attrs = {}
277
275
  dir_key = None
@@ -350,14 +348,13 @@ def _casa_image_to_xds_attrs(img_full_path: str) -> dict:
350
348
 
351
349
 
352
350
  def _casa_image_to_xds_coords(
353
- img_full_path: str, verbose: bool, do_sky_coords: bool
351
+ img_full_path: str, verbose: bool, do_sky_coords: bool, image_type: str
354
352
  ) -> dict:
355
353
  """
356
354
  TODO: complete documentation
357
355
  Create an xds without any pixel data from metadata from the specified CASA image
358
356
  """
359
357
  attrs = {}
360
- # casa_image = images.image(img_full_path)
361
358
  with _open_image_ro(img_full_path) as casa_image:
362
359
  # shape list is the reverse of the actual image shape
363
360
  shape = casa_image.shape()[::-1]
@@ -390,46 +387,47 @@ def _casa_image_to_xds_coords(
390
387
  coord_dict
391
388
  )
392
389
  coords["velocity"] = (["frequency"], velocity_vals)
393
- if len(sphr_dims) > 0:
394
- crpix = _flatten_list(csys.get_referencepixel())[::-1]
395
- inc = _flatten_list(csys.get_increment())[::-1]
396
- unit = _flatten_list(csys.get_unit())[::-1]
397
- attr_note = _l_m_attr_notes()
398
- for c in ["l", "m"]:
399
- idx = dimmap[c]
400
- delta = ((inc[idx]) * u.Unit(_get_unit(unit[idx]))).to("rad").value
401
- coords[c] = _compute_linear_world_values(
402
- naxis=shape[idx], crval=0.0, crpix=crpix[idx], cdelt=delta
403
- )
404
- coord_attrs[c] = {
405
- "note": attr_note[c],
406
- }
407
- if do_sky_coords:
408
- for k in coord_dict.keys():
409
- if k.startswith("direction"):
410
- dc = coordinates.directioncoordinate(coord_dict[k])
411
- break
412
- crval = _flatten_list(csys.get_referencevalue())[::-1]
413
- pick = lambda my_list: [my_list[i] for i in sphr_dims]
414
- my_ret = _compute_world_sph_dims(
415
- projection=dc.get_projection(),
416
- shape=pick(shape),
417
- ctype=diraxes,
418
- crval=pick(crval),
419
- crpix=pick(crpix),
420
- cdelt=pick(inc),
421
- cunit=pick(unit),
422
- )
423
- for i in [0, 1]:
424
- axis_name = my_ret["axis_name"][i]
425
- coords[axis_name] = (["l", "m"], my_ret["value"][i])
426
- coord_attrs[axis_name] = {}
427
- else:
428
- # Fourier image
429
- ret = _get_uv_values_attrs(coord_dict, axis_names, shape)
430
- for z in ["u", "v"]:
431
- coords[z], coord_attrs[z] = ret[z]
432
- coords["beam_params_label"] = ["major", "minor", "pa"]
390
+ if image_type.upper() != "VISIBILITY_NORMALIZATION":
391
+ if len(sphr_dims) > 0:
392
+ crpix = _flatten_list(csys.get_referencepixel())[::-1]
393
+ inc = _flatten_list(csys.get_increment())[::-1]
394
+ unit = _flatten_list(csys.get_unit())[::-1]
395
+ attr_note = _l_m_attr_notes()
396
+ for c in ["l", "m"]:
397
+ idx = dimmap[c]
398
+ delta = ((inc[idx]) * u.Unit(_get_unit(unit[idx]))).to("rad").value
399
+ coords[c] = _compute_linear_world_values(
400
+ naxis=shape[idx], crval=0.0, crpix=crpix[idx], cdelt=delta
401
+ )
402
+ coord_attrs[c] = {
403
+ "note": attr_note[c],
404
+ }
405
+ if do_sky_coords:
406
+ for k in coord_dict.keys():
407
+ if k.startswith("direction"):
408
+ dc = coordinates.directioncoordinate(coord_dict[k])
409
+ break
410
+ crval = _flatten_list(csys.get_referencevalue())[::-1]
411
+ pick = lambda my_list: [my_list[i] for i in sphr_dims]
412
+ my_ret = _compute_world_sph_dims(
413
+ projection=dc.get_projection(),
414
+ shape=pick(shape),
415
+ ctype=diraxes,
416
+ crval=pick(crval),
417
+ crpix=pick(crpix),
418
+ cdelt=pick(inc),
419
+ cunit=pick(unit),
420
+ )
421
+ for i in [0, 1]:
422
+ axis_name = my_ret["axis_name"][i]
423
+ coords[axis_name] = (["l", "m"], my_ret["value"][i])
424
+ coord_attrs[axis_name] = {}
425
+ else:
426
+ # Fourier image
427
+ ret = _get_uv_values_attrs(coord_dict, axis_names, shape)
428
+ for z in ["u", "v"]:
429
+ coords[z], coord_attrs[z] = ret[z]
430
+ coords["beam_params_label"] = ["major", "minor", "pa"]
433
431
  attrs["shape"] = shape
434
432
  xds = xr.Dataset(coords=coords)
435
433
  for c in coord_attrs.keys():
@@ -177,7 +177,7 @@ def _coord_dict_from_xds(xds: xr.Dataset) -> dict:
177
177
  if "observer" in xds[sky_ap].attrs:
178
178
  coord["observer"] = xds[sky_ap].attrs["observer"]
179
179
  obsdate = {}
180
- obsdate["refer"] = xds.coords["time"].attrs["scale"]
180
+ obsdate["refer"] = xds.coords["time"].attrs["scale"].upper()
181
181
  obsdate["type"] = "epoch"
182
182
  obsdate["m0"] = {}
183
183
  obsdate["m0"]["unit"] = xds.coords["time"].attrs["units"]
@@ -72,7 +72,7 @@ def _fits_image_to_xds(
72
72
  xds = _create_coords(helpers, header, do_sky_coords)
73
73
  sphr_dims = helpers["sphr_dims"]
74
74
  ary = _read_image_array(img_full_path, chunks, helpers, verbose)
75
- dim_order = _get_xds_dim_order(sphr_dims)
75
+ dim_order = _get_xds_dim_order(sphr_dims, image_type)
76
76
  xds = _add_sky_or_aperture(
77
77
  xds, ary, dim_order, header, helpers, sphr_dims, image_type
78
78
  )
@@ -10,7 +10,7 @@ from typing import Union
10
10
 
11
11
  import xarray as xr
12
12
  import re
13
-
13
+ import dask.array as da
14
14
  from xradio._utils.schema import get_data_group_keys
15
15
 
16
16
  try:
@@ -47,25 +47,63 @@ from xradio.image._util._casacore.common import _beam_fit_params, _open_image_ro
47
47
  warnings.filterwarnings("ignore", category=FutureWarning)
48
48
 
49
49
 
50
- def _load_casa_image_block(
51
- infile: str, block_des: dict, do_sky_coords, image_type: str
52
- ) -> xr.Dataset:
50
+ def _squeeze_if_needed(ary: da, image_type: str) -> da:
51
+ if image_type.upper() == "VISIBILITY_NORMALIZATION":
52
+ shape = ary.shape
53
+ if shape[3] != 1 or shape[4] != 1:
54
+ raise ValueError(
55
+ "VISIBILITY_NORMALIZATION casa image must have l and m of length 1. Found "
56
+ + [shape[3], shape[4]]
57
+ )
58
+ ary = ary.squeeze(axis=(3, 4))
59
+ return ary
60
+
61
+
62
+ def _get_casa_image_metadata(infile: str, do_sky_coords: bool, image_type: str) -> dict:
53
63
  image_full_path = os.path.expanduser(infile)
54
64
  with _open_image_ro(image_full_path) as casa_image:
55
65
  coords = casa_image.coordinates()
56
66
  cshape = casa_image.shape()
57
- ret = _casa_image_to_xds_coords(image_full_path, False, do_sky_coords)
58
- xds = ret["xds"].isel(block_des)
67
+ ret = _casa_image_to_xds_coords(image_full_path, False, do_sky_coords, image_type)
68
+ xds = ret["xds"]
69
+ sphr_dims = ret["sphr_dims"]
59
70
  nchan = ret["xds"].sizes["frequency"]
60
71
  npol = ret["xds"].sizes["polarization"]
72
+ dimorder = _get_xds_dim_order(ret["sphr_dims"], image_type)
73
+ metadata = {
74
+ "coords": coords,
75
+ "cshape": cshape,
76
+ "image_full_path": image_full_path,
77
+ "nchan": nchan,
78
+ "npol": npol,
79
+ "dimorder": dimorder,
80
+ # "xds_attrs": _casa_image_to_xds_attrs(image_full_path),
81
+ "sphr_dims": sphr_dims,
82
+ "xds": xds,
83
+ }
84
+ return metadata
85
+
86
+
87
+ def _load_casa_image_block(
88
+ infile: str, block_des: dict, do_sky_coords: bool, image_type: str
89
+ ) -> xr.Dataset:
90
+ md = _get_casa_image_metadata(infile, do_sky_coords, image_type)
91
+ coords = md["coords"]
92
+ cshape = md["cshape"]
93
+ dimorder = md["dimorder"]
94
+ sphr_dims = md["sphr_dims"]
95
+ nchan = md["nchan"]
96
+ npol = md["npol"]
97
+ xds = md["xds"].isel(block_des)
98
+ image_full_path = md["image_full_path"]
61
99
  starts, shapes, slices = _get_starts_shapes_slices(block_des, coords, cshape)
62
- dimorder = _get_xds_dim_order(ret["sphr_dims"])
63
100
  transpose_list, new_axes = _get_transpose_list(coords)
64
101
  block = _get_persistent_block(
65
102
  image_full_path, shapes, starts, dimorder, transpose_list, new_axes
66
103
  )
104
+ block = _squeeze_if_needed(block, image_type)
67
105
  xds = _add_sky_or_aperture(
68
- xds, block, dimorder, image_full_path, ret["sphr_dims"], False, image_type
106
+ xds, block, dimorder, image_full_path, sphr_dims, False, image_type
69
107
  )
70
108
  mymasks = _get_mask_names(image_full_path)
71
109
  for m in mymasks:
@@ -104,18 +142,21 @@ def _open_casa_image(
104
142
  history: bool = False,
105
143
  image_type: str = "SKY",
106
144
  ) -> xr.Dataset:
107
- img_full_path = os.path.expanduser(infile)
108
- ret = _casa_image_to_xds_coords(img_full_path, verbose, do_sky_coords)
109
- xds = ret["xds"]
110
- dimorder = _get_xds_dim_order(ret["sphr_dims"])
145
+ md = _get_casa_image_metadata(infile, do_sky_coords, image_type)
146
+ xds = md["xds"]
147
+ dimorder = md["dimorder"]
148
+ sphr_dims = md["sphr_dims"]
149
+ img_full_path = md["image_full_path"]
150
+ ary = _read_image_array(img_full_path, chunks, verbose=verbose)
151
+ ary = _squeeze_if_needed(ary, image_type)
111
152
  xds = _add_sky_or_aperture(
112
153
  xds,
113
- _read_image_array(img_full_path, chunks, verbose=verbose),
154
+ ary,
114
155
  dimorder,
115
156
  img_full_path,
116
- ret["sphr_dims"],
157
+ sphr_dims,
117
158
  history,
118
- image_type=image_type,
159
+ image_type,
119
160
  )
120
161
  if masks:
121
162
  mymasks = _get_mask_names(img_full_path)
@@ -25,10 +25,11 @@ def _aperture_or_sky(xds: xr.Dataset) -> str:
25
25
  return "SKY" if "SKY" in xds.data_vars or "l" in xds.coords else "APERTURE"
26
26
 
27
27
 
28
- def _get_xds_dim_order(has_sph: bool) -> list:
28
+ def _get_xds_dim_order(has_sph: bool, image_type: str) -> list:
29
29
  dimorder = ["time", "frequency", "polarization"]
30
- dir_lin = ["l", "m"] if has_sph else ["u", "v"]
31
- dimorder.extend(dir_lin)
30
+ if image_type.upper() != "VISIBILITY_NORMALIZATION":
31
+ dir_lin = ["l", "m"] if has_sph else ["u", "v"]
32
+ dimorder.extend(dir_lin)
32
33
  return dimorder
33
34
 
34
35
 
@@ -693,14 +693,17 @@ def create_image_xds_from_store(
693
693
  data_group["beam_fit_params_point_spread_function"] = (
694
694
  "BEAM_FIT_PARAMS_" + image_type.upper()
695
695
  )
696
+ if (
697
+ "visibility_normalization" not in image_type.lower()
698
+ or len(img_xds.data_vars) > 1
699
+ ):
700
+ # if beam_param coord not in image type it is not auto assigned to img_xds
701
+ # but it must be present even if unused
702
+ if "beam_params_label" not in img_xds.dims:
703
+ img_xds.expand_dims(beam_params_label=3)
696
704
 
697
- # if beam_param coord not in image type it is not auto assigned to img_xds
698
- # but it must be present even if unused
699
- if "beam_params_label" not in img_xds.dims:
700
- img_xds.expand_dims(beam_params_label=3)
701
-
702
- if "beam_params_label" not in img_xds.coords:
703
- img_xds = _move_beam_param_dim_coord(img_xds)
705
+ if "beam_params_label" not in img_xds.coords:
706
+ img_xds = _move_beam_param_dim_coord(img_xds)
704
707
  img_xds.attrs["type"] = "image_dataset"
705
708
  img_xds.attrs["data_groups"] = data_groups
706
709
  return img_xds
@@ -93,12 +93,9 @@ def convert_mjd_time(rawtimes: np.ndarray) -> np.ndarray:
93
93
  np.ndarray
94
94
  times converted to pandas reference and datetime type
95
95
  """
96
-
97
- print("^^^^^^^", rawtimes, MJD_DIF_UNIX, SECS_IN_DAY)
98
96
  times_reref = pd.to_datetime(
99
97
  (rawtimes - MJD_DIF_UNIX) * SECS_IN_DAY, unit="s"
100
98
  ).values
101
- print("^^^^^^^", times_reref)
102
99
 
103
100
  return times_reref
104
101
 
@@ -5,8 +5,6 @@ This module provides reusable test utilities for generating test data,
5
5
  custom assertions, and helper functions for testing xradio functionality.
6
6
  """
7
7
 
8
- import toolviper.utils.logger as _logger
9
-
10
8
  __all__ = [
11
9
  # Generators
12
10
  "gen_test_ms",
@@ -49,6 +47,8 @@ try:
49
47
  build_minimal_msv4_xdt,
50
48
  )
51
49
  except ModuleNotFoundError as exc:
50
+ import toolviper.utils.logger as _logger
51
+
52
52
  _logger.warning(
53
53
  "Could not import casacore tables to handle MSv2. "
54
54
  "Could not import the functions to convert from MSv2 to MSv4. "
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xradio
3
- Version: 1.1.0
3
+ Version: 1.1.1
4
4
  Summary: Xarray Radio Astronomy Data IO
5
5
  Author-email: Jan-Willem Steeb <jsteeb@nrao.edu>, Federico Montesino Pouzols <pouzols@eso.edu>, Dave Mehringer <dmehring@nrao.edu>, Peter Wortmann <peter.wortmann@skao.int>
6
6
  License: BSD 3-Clause License
@@ -98,6 +98,7 @@ Requires-Dist: sphinx-autosummary-accessors; extra == "docs"
98
98
  Requires-Dist: sphinx_rtd_theme; extra == "docs"
99
99
  Requires-Dist: twine; extra == "docs"
100
100
  Requires-Dist: pandoc; extra == "docs"
101
+ Requires-Dist: toolviper; extra == "docs"
101
102
  Provides-Extra: all
102
103
  Requires-Dist: astropy; extra == "all"
103
104
  Requires-Dist: toolviper>=0.0.12; extra == "all"
@@ -5,7 +5,7 @@ xradio/_utils/dict_helpers.py,sha256=SH8Fu-nHGLa00ii5Q6wghBZcmF5sWmEI3887FRbl8lk
5
5
  xradio/_utils/list_and_array.py,sha256=jnTGydSciWnAqyCzsuxsAiKot5-fiQ_0JeJ9-ExwRMM,5099
6
6
  xradio/_utils/schema.py,sha256=n24XSPZAhyYTu3QciD5XOTeGoebmxc8iM5WRCI2y_ZE,8876
7
7
  xradio/_utils/xarray_helpers.py,sha256=LQyh754BRFvKz8xP0CF_nWBj0s2HI5KVUz7c1YxC3Bc,1998
8
- xradio/_utils/_casacore/casacore_from_casatools.py,sha256=lpkiDVj6eXpxY07xwTOwZba_Mw-g2uOAdspOdfPVVtE,31208
8
+ xradio/_utils/_casacore/casacore_from_casatools.py,sha256=FDlerWYCFvU5OKFoJ5PJBbhv78jxc3iWGGfYVP00YK8,33008
9
9
  xradio/_utils/_casacore/tables.py,sha256=puRidbjtVx6caEG_Z5TebTLdTUbtBUhzvqByKLQTHfo,1389
10
10
  xradio/_utils/zarr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  xradio/_utils/zarr/common.py,sha256=MTew96RhSS2f77-hIsP4aXS2tZwF1THvjpkRQQqpmgk,2989
@@ -14,15 +14,15 @@ xradio/image/image.py,sha256=SuEc0G4MRIOAv--qSPo2jMfJhJlHGA-nr3LdSA_Sykk,15366
14
14
  xradio/image/image_xds.py,sha256=-RS3wM6uSspZSu50jaPgopUYQQbU8KgQSBUt6sh7XuE,9169
15
15
  xradio/image/schema.py,sha256=S3FkclHMLucgw3ciTpqdc9x1P--ZxwhJZis5lyW7XcM,6043
16
16
  xradio/image/_util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
- xradio/image/_util/casacore.py,sha256=eyV9Zb7ubMb8YD0xkrRCHa1C7btBF7w5SBrXzBFQZ1E,10028
18
- xradio/image/_util/common.py,sha256=lcxletfv18zUUJgG8Qs_fV-VdON3D3xJIo5r97be6FU,8490
19
- xradio/image/_util/image_factory.py,sha256=qlQRfOBF_i98embr4x7vComrKkheRRlHl4J2ETTsAVo,24905
17
+ xradio/image/_util/casacore.py,sha256=xkEiWpLDWClxCNjmXm6oXFgZkTBgAMmeqBBjyr325h8,11327
18
+ xradio/image/_util/common.py,sha256=6IB3LgAJvla_m6DowTeRZVsGlOpidoz-rlnRO6ueMQg,8572
19
+ xradio/image/_util/image_factory.py,sha256=NgXuE73H3An2ar9ebN_S-lQ5MXnX07D2sFhAOvIDVVk,25043
20
20
  xradio/image/_util/zarr.py,sha256=lhQqVRC1GEWClG3zRbuDr2IlQBfXeDqaLUJIN-MVMxA,1652
21
21
  xradio/image/_util/_casacore/__init__.py,sha256=OlsiRE40o1jSbBI4khgQQzgfDYbAlOMKIhO4UFlbGhg,41
22
22
  xradio/image/_util/_casacore/common.py,sha256=PHt7SNllwYW70w9pEhLrcCZ7avoZNmwKxTSnhSQQtOU,1793
23
- xradio/image/_util/_casacore/xds_from_casacore.py,sha256=gdyMQ7LymKLU0Y1rj6uypGzTOkJZ5GWS-uCi-N6u4es,45913
24
- xradio/image/_util/_casacore/xds_to_casacore.py,sha256=dltoHo9TRklbxjcSkiGu6KaSehNQarGqo3lBSCiOhAw,20331
25
- xradio/image/_util/_fits/xds_from_fits.py,sha256=U5bskcCCsQAUn8spJ6fxXtgGIiGaNflK4yS26x6KH9o,38221
23
+ xradio/image/_util/_casacore/xds_from_casacore.py,sha256=UuNMbZO20H3O7VfeqtZpnfvgZIQzK4uuKf8yG6bYaSQ,46028
24
+ xradio/image/_util/_casacore/xds_to_casacore.py,sha256=9Lh8HOiQwpRujE47h3BnFzqlGYaA1FpXafsDldsui84,20339
25
+ xradio/image/_util/_fits/xds_from_fits.py,sha256=d6cW2A4FRlus5YyXQg9bdFbBoirnxvDD7BurnEoe2Kk,38233
26
26
  xradio/image/_util/_zarr/common.py,sha256=U_nMtFYN_qFDP0h8JiLEEBG3ufF5ckVo8XQMC16xti8,307
27
27
  xradio/image/_util/_zarr/xds_from_zarr.py,sha256=KMsfaSSm9kyVoztS6pUzGNxMZzQnCxkk0kDv2GxW5Kw,4451
28
28
  xradio/image/_util/_zarr/xds_to_zarr.py,sha256=nsDvDD-kuMuMF2dDlj0jTxSW4mdR-jjIsvXHi5uIERU,2373
@@ -45,7 +45,7 @@ xradio/measurement_set/_utils/_msv2/msv4_sub_xdss.py,sha256=nXuiDhszP3AejUo1zlpq
45
45
  xradio/measurement_set/_utils/_msv2/optimised_functions.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
46
  xradio/measurement_set/_utils/_msv2/partition_queries.py,sha256=_eWxxgxEYRX1Pj1ZFHD_HIcrF9Rpfe6OJmp3uYJ2UiY,11970
47
47
  xradio/measurement_set/_utils/_msv2/subtables.py,sha256=mrf7g7mbC4crtnQ0wFocPcFRNlvq_7e7iDzE5B6ugl4,843
48
- xradio/measurement_set/_utils/_msv2/_tables/read.py,sha256=P5-sz_hwBRqzgPfhN-zcdFayfOekDMQJKLN2f8OTnys,45599
48
+ xradio/measurement_set/_utils/_msv2/_tables/read.py,sha256=Q8zNzHxS0BpA1QIIGvU6OGJ4sLniSFcShP7I8VzRNFc,45506
49
49
  xradio/measurement_set/_utils/_msv2/_tables/read_main_table.py,sha256=FFoTVpY8JNvcXnTvUiraWNU9gB9-_9GR7he0NbODabg,3168
50
50
  xradio/measurement_set/_utils/_msv2/_tables/table_query.py,sha256=Uc1zeiU-rYtCsYXpij8jzFG5NPBYvIh70qW1srn7B98,1498
51
51
  xradio/measurement_set/_utils/_utils/interpolate.py,sha256=eIHEZ2VAW0JjMQQ08xaUcKQpko7HrQU2UfXKzVBlNwA,2262
@@ -64,12 +64,12 @@ xradio/sphinx/__init__.py,sha256=VGY-7Ty3q67qpnBee0-znbiJ-Iy0F93UO--IpjEdHXc,380
64
64
  xradio/sphinx/schema_table.py,sha256=CrhWMDYHwB7CbBMGfWtW20bLoBkeQZHd6l91cihvaBA,10709
65
65
  xradio/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
66
  xradio/testing/_utils/__template__.py,sha256=1A3WJ2dcQwiIsxHqJscvn1Pmff7FhUXXxbpPOP0DT70,2010
67
- xradio/testing/measurement_set/__init__.py,sha256=Vjk_959ZT48O7JRwXnUrIC3YvTH8GnrNRbee-RLjDco,1618
67
+ xradio/testing/measurement_set/__init__.py,sha256=GyPuylaaWyC04c_B0hPUjwfUd3G7zaOL2dquZiQYSIA,1622
68
68
  xradio/testing/measurement_set/checker.py,sha256=39wbX0xcLm6gsPiVTASbOciuoF_WzGOAcVe-7wir0Xg,4566
69
69
  xradio/testing/measurement_set/io.py,sha256=A3m6tm2Rvoacw8-SO3UhNboEek1YeDCMguwHClUIqn4,559
70
70
  xradio/testing/measurement_set/msv2_io.py,sha256=twQofNpkc8cIU2Z4CGpFL1fV_JotUWDX40nmGFVrfH8,59713
71
- xradio-1.1.0.dist-info/licenses/LICENSE.txt,sha256=9CYIJt7riOXo9AD0eXBZviLxo_HebD-2JJI8oiWtzfg,1807
72
- xradio-1.1.0.dist-info/METADATA,sha256=Mcoe3VygnEKSktsS4L3juXKZ-o2TaMtV7nojyi4RNL0,9744
73
- xradio-1.1.0.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
74
- xradio-1.1.0.dist-info/top_level.txt,sha256=dQu27fGBZJ2Yk-gW5XeD-dZ76Xa4Xcvk60Vz-dwXp7k,7
75
- xradio-1.1.0.dist-info/RECORD,,
71
+ xradio-1.1.1.dist-info/licenses/LICENSE.txt,sha256=9CYIJt7riOXo9AD0eXBZviLxo_HebD-2JJI8oiWtzfg,1807
72
+ xradio-1.1.1.dist-info/METADATA,sha256=Isdrfu_9EZxyyAKlx9WQ17cil-ja5CFc7wUyUaunE50,9786
73
+ xradio-1.1.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
74
+ xradio-1.1.1.dist-info/top_level.txt,sha256=dQu27fGBZJ2Yk-gW5XeD-dZ76Xa4Xcvk60Vz-dwXp7k,7
75
+ xradio-1.1.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.10.1)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5