xradio 0.0.53__tar.gz → 0.0.55__tar.gz

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.
Files changed (83) hide show
  1. {xradio-0.0.53/src/xradio.egg-info → xradio-0.0.55}/PKG-INFO +1 -1
  2. {xradio-0.0.53 → xradio-0.0.55}/pyproject.toml +1 -1
  3. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/image/_util/_casacore/xds_from_casacore.py +36 -69
  4. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/image/_util/_casacore/xds_to_casacore.py +4 -2
  5. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/image/_util/_fits/xds_from_fits.py +1 -1
  6. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/image/_util/casacore.py +16 -11
  7. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/image/image.py +1 -1
  8. {xradio-0.0.53 → xradio-0.0.55/src/xradio.egg-info}/PKG-INFO +1 -1
  9. {xradio-0.0.53 → xradio-0.0.55}/LICENSE.txt +0 -0
  10. {xradio-0.0.53 → xradio-0.0.55}/MANIFEST.in +0 -0
  11. {xradio-0.0.53 → xradio-0.0.55}/README.md +0 -0
  12. {xradio-0.0.53 → xradio-0.0.55}/setup.cfg +0 -0
  13. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/__init__.py +0 -0
  14. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/_utils/__init__.py +0 -0
  15. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/_utils/_casacore/tables.py +0 -0
  16. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/_utils/coord_math.py +0 -0
  17. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/_utils/dict_helpers.py +0 -0
  18. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/_utils/list_and_array.py +0 -0
  19. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/_utils/schema.py +0 -0
  20. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/_utils/zarr/__init__.py +0 -0
  21. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/_utils/zarr/common.py +0 -0
  22. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/image/__init__.py +0 -0
  23. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/image/_util/__init__.py +0 -0
  24. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/image/_util/_casacore/__init__.py +0 -0
  25. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/image/_util/_casacore/common.py +0 -0
  26. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/image/_util/_zarr/common.py +0 -0
  27. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/image/_util/_zarr/xds_from_zarr.py +0 -0
  28. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/image/_util/_zarr/xds_to_zarr.py +0 -0
  29. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/image/_util/_zarr/zarr_low_level.py +0 -0
  30. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/image/_util/common.py +0 -0
  31. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/image/_util/fits.py +0 -0
  32. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/image/_util/image_factory.py +0 -0
  33. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/image/_util/zarr.py +0 -0
  34. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/__init__.py +0 -0
  35. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/__init__.py +0 -0
  36. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/_tables/load.py +0 -0
  37. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/_tables/load_main_table.py +0 -0
  38. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/_tables/read.py +0 -0
  39. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/_tables/read_main_table.py +0 -0
  40. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/_tables/read_subtables.py +0 -0
  41. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/_tables/table_query.py +0 -0
  42. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/_tables/write.py +0 -0
  43. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/_tables/write_exp_api.py +0 -0
  44. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/chunks.py +0 -0
  45. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/conversion.py +0 -0
  46. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/create_antenna_xds.py +0 -0
  47. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/create_field_and_source_xds.py +0 -0
  48. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/descr.py +0 -0
  49. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/msv2_msv3.py +0 -0
  50. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/msv2_to_msv4_meta.py +0 -0
  51. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/msv4_info_dicts.py +0 -0
  52. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/msv4_sub_xdss.py +0 -0
  53. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/optimised_functions.py +0 -0
  54. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/partition_queries.py +0 -0
  55. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/partitions.py +0 -0
  56. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_msv2/subtables.py +0 -0
  57. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_utils/cds.py +0 -0
  58. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_utils/partition_attrs.py +0 -0
  59. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_utils/stokes_types.py +0 -0
  60. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_utils/xds_helper.py +0 -0
  61. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_zarr/encoding.py +0 -0
  62. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_zarr/read.py +0 -0
  63. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/_zarr/write.py +0 -0
  64. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/msv2.py +0 -0
  65. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/_utils/zarr.py +0 -0
  66. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/convert_msv2_to_processing_set.py +0 -0
  67. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/load_processing_set.py +0 -0
  68. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/measurement_set_xdt.py +0 -0
  69. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/open_processing_set.py +0 -0
  70. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/processing_set_xdt.py +0 -0
  71. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/measurement_set/schema.py +0 -0
  72. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/schema/__init__.py +0 -0
  73. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/schema/bases.py +0 -0
  74. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/schema/check.py +0 -0
  75. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/schema/dataclass.py +0 -0
  76. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/schema/metamodel.py +0 -0
  77. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/schema/typing.py +0 -0
  78. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/sphinx/__init__.py +0 -0
  79. {xradio-0.0.53 → xradio-0.0.55}/src/xradio/sphinx/schema_table.py +0 -0
  80. {xradio-0.0.53 → xradio-0.0.55}/src/xradio.egg-info/SOURCES.txt +0 -0
  81. {xradio-0.0.53 → xradio-0.0.55}/src/xradio.egg-info/dependency_links.txt +0 -0
  82. {xradio-0.0.53 → xradio-0.0.55}/src/xradio.egg-info/requires.txt +0 -0
  83. {xradio-0.0.53 → xradio-0.0.55}/src/xradio.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xradio
3
- Version: 0.0.53
3
+ Version: 0.0.55
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "xradio"
3
- version = "0.0.53"
3
+ version = "0.0.55"
4
4
  description = " Xarray Radio Astronomy Data IO"
5
5
  authors = [
6
6
  {name = "Jan-Willem Steeb", email="jsteeb@nrao.edu"},
@@ -54,30 +54,6 @@ def _add_lin_attrs(xds, coord_dict, dir_axes):
54
54
  return xds
55
55
 
56
56
 
57
- def _add_freq_attrs(xds, coord_dict):
58
- freq_coord = xds["frequency"]
59
- meta = {}
60
- for k in coord_dict:
61
- if k.startswith("spectral"):
62
- sd = coord_dict[k]
63
- meta["rest_frequency"] = make_quantity(sd["restfreq"], "Hz")
64
- meta["type"] = "frequency"
65
- # meta["units"] = sd["unit"]
66
- # meta["frame"] = sd["system"]
67
- meta["wave_unit"] = sd["waveUnit"]
68
- # meta["crval"] = sd["wcs"]["crval"]
69
- # meta["cdelt"] = sd["wcs"]["cdelt"]
70
- meta["reference_value"] = make_frequency_reference_dict(
71
- value=sd["wcs"]["crval"],
72
- units=sd["unit"],
73
- observer=sd["system"],
74
- )
75
- if not meta:
76
- # this is the default frequency information CASA creates
77
- meta = _default_freq_info()
78
- freq_coord.attrs = meta
79
-
80
-
81
57
  def _add_mask(
82
58
  xds: xr.Dataset, name: str, ary: Union[np.ndarray, da.array], dimorder: list
83
59
  ) -> xr.Dataset:
@@ -553,7 +529,7 @@ def _get_freq_values_attrs(
553
529
  # attrs["type"] = "frequency"
554
530
  # attrs["units"] = sd["unit"]
555
531
  # attrs["frame"] = sd["system"]
556
- attrs["wave_unit"] = sd["waveUnit"]
532
+ attrs["wave_unit"] = [sd["waveUnit"]]
557
533
  # attrs["crval"] = sd["wcs"]["crval"]
558
534
  # attrs["cdelt"] = sd["wcs"]["cdelt"]
559
535
 
@@ -623,36 +599,6 @@ def _get_mask_names(infile: str) -> list:
623
599
  return mymasks
624
600
 
625
601
 
626
- def _get_beam(imageinfo: dict, nchan: int, npol: int) -> Union[np.ndarray, None]:
627
- """Returns None if the image has no beam(s)"""
628
- x = ["perplanebeams", "restoringbeam"]
629
- r = None
630
- for z in x:
631
- if z in imageinfo:
632
- r = z
633
- break
634
- if r is None:
635
- return None
636
- beam = imageinfo[r]
637
- beam_array = np.zeros([1, nchan, npol, 3])
638
- if r == "perplanebeams":
639
- for c in range(nchan):
640
- for p in range(npol):
641
- k = nchan * p + c
642
- b = _casacore_q_to_xradio_q(beam["*" + str(k)])
643
- beam_dict = _convert_beam_to_rad(b)
644
- beam_array[0][c][p][0] = beam_dict["major"]["data"]
645
- beam_array[0][c][p][1] = beam_dict["minor"]["data"]
646
- beam_array[0][c][p][2] = beam_dict["pa"]["data"]
647
- elif r == "restoringbeam":
648
- b = _casacore_q_to_xradio_q(beam)
649
- beam_dict = _convert_beam_to_rad(b)
650
- beam_array[0, :, :, 0] = beam_dict["major"]["data"]
651
- beam_array[0, :, :, 1] = beam_dict["minor"]["data"]
652
- beam_array[0, :, :, 2] = beam_dict["pa"]["data"]
653
- return beam_array
654
-
655
-
656
602
  def _get_persistent_block(
657
603
  infile: str,
658
604
  shapes: tuple,
@@ -858,25 +804,46 @@ def _get_velocity_values_attrs(
858
804
  )
859
805
 
860
806
 
861
- def _multibeam_array(
862
- xds: xr.Dataset, img_full_path: str, as_dask_array: bool
807
+ def _get_beam(
808
+ img_full_path: str, nchan: int, npol: int, as_dask_array: bool
863
809
  ) -> Union[xr.DataArray, None]:
864
810
  # the image may have multiple beams
865
811
  with _open_image_ro(img_full_path) as casa_image:
866
812
  imageinfo = casa_image.info()["imageinfo"]
867
- mb = _get_beam(
868
- imageinfo, nchan=xds.sizes["frequency"], npol=xds.sizes["polarization"]
869
- )
870
- if mb is not None:
871
- if as_dask_array:
872
- mb = da.array(mb)
873
- xdb = xr.DataArray(mb, dims=["time", "frequency", "polarization", "beam_param"])
874
- xdb = xdb.rename("BEAM")
875
- xdb = xdb.assign_coords(beam_param=["major", "minor", "pa"])
876
- xdb.attrs["units"] = "rad"
877
- return xdb
878
- else:
813
+ x = ["perplanebeams", "restoringbeam"]
814
+ r = None
815
+ for z in x:
816
+ if z in imageinfo:
817
+ r = z
818
+ break
819
+ if r is None:
879
820
  return None
821
+ beam = imageinfo[r]
822
+ beam_array = np.zeros([1, nchan, npol, 3])
823
+ if r == "perplanebeams":
824
+ for c in range(nchan):
825
+ for p in range(npol):
826
+ k = nchan * p + c
827
+ b = _casacore_q_to_xradio_q(beam["*" + str(k)])
828
+ beam_dict = _convert_beam_to_rad(b)
829
+ beam_array[0][c][p][0] = beam_dict["major"]["data"]
830
+ beam_array[0][c][p][1] = beam_dict["minor"]["data"]
831
+ beam_array[0][c][p][2] = beam_dict["pa"]["data"]
832
+ elif r == "restoringbeam":
833
+ b = _casacore_q_to_xradio_q(beam)
834
+ beam_dict = _convert_beam_to_rad(b)
835
+ beam_array[0, :, :, 0] = beam_dict["major"]["data"]
836
+ beam_array[0, :, :, 1] = beam_dict["minor"]["data"]
837
+ beam_array[0, :, :, 2] = beam_dict["pa"]["data"]
838
+ if as_dask_array:
839
+ beam_array = da.array(beam_array)
840
+ xdb = xr.DataArray(
841
+ beam_array, dims=["time", "frequency", "polarization", "beam_param"]
842
+ )
843
+ xdb = xdb.rename("BEAM")
844
+ xdb = xdb.assign_coords(beam_param=["major", "minor", "pa"])
845
+ xdb.attrs["units"] = "rad"
846
+ return xdb
880
847
 
881
848
 
882
849
  ###########################################################################
@@ -88,9 +88,11 @@ def _compute_spectral_dict(xds: xr.Dataset) -> dict:
88
88
  spec["unit"] = u if isinstance(u, str) else u[0]
89
89
  spec["velType"] = _doppler_types.index(xds.velocity.attrs["doppler_type"])
90
90
  u = xds.velocity.attrs["units"]
91
- spec["velUnit"] = u if isinstance(u, str) else u[0]
92
91
  spec["version"] = 2
93
- spec["waveUnit"] = xds.frequency.attrs["wave_unit"]
92
+ # vel unit is a list[str] in the xds but needs to be a str in the casa image
93
+ spec["velUnit"] = xds.velocity.attrs["units"][0]
94
+ # wave unit is a list[str] in the xds but needs to be a str in the casa image
95
+ spec["waveUnit"] = xds.frequency.attrs["wave_unit"][0]
94
96
  wcs = {}
95
97
  wcs["ctype"] = "FREQ"
96
98
  wcs["pc"] = 1.0
@@ -83,7 +83,7 @@ def _add_freq_attrs(xds: xr.Dataset, helpers: dict) -> xr.Dataset:
83
83
  meta["rest_frequency"] = make_quantity(helpers["restfreq"], "Hz")
84
84
  meta["rest_frequencies"] = [meta["rest_frequency"]]
85
85
  meta["type"] = "frequency"
86
- meta["wave_unit"] = "mm"
86
+ meta["wave_unit"] = ["mm"]
87
87
  freq_axis = helpers["freq_axis"]
88
88
  meta["reference_value"] = make_frequency_reference_dict(
89
89
  helpers["crval"][freq_axis], ["Hz"], helpers["specsys"]
@@ -21,7 +21,7 @@ from ._casacore.xds_from_casacore import (
21
21
  _get_persistent_block,
22
22
  _get_starts_shapes_slices,
23
23
  _get_transpose_list,
24
- _multibeam_array,
24
+ _get_beam,
25
25
  _read_image_array,
26
26
  )
27
27
  from ._casacore.xds_to_casacore import (
@@ -42,6 +42,8 @@ def _load_casa_image_block(infile: str, block_des: dict, do_sky_coords) -> xr.Da
42
42
  cshape = casa_image.shape()
43
43
  ret = _casa_image_to_xds_coords(image_full_path, False, do_sky_coords)
44
44
  xds = ret["xds"].isel(block_des)
45
+ nchan = ret["xds"].dims["frequency"]
46
+ npol = ret["xds"].dims["polarization"]
45
47
  starts, shapes, slices = _get_starts_shapes_slices(block_des, coords, cshape)
46
48
  dimorder = _get_xds_dim_order(ret["sphr_dims"])
47
49
  transpose_list, new_axes = _get_transpose_list(coords)
@@ -60,13 +62,14 @@ def _load_casa_image_block(infile: str, block_des: dict, do_sky_coords) -> xr.Da
60
62
  # data vars are all caps by convention
61
63
  xds = _add_mask(xds, m.upper(), block, dimorder)
62
64
  xds.attrs = _casa_image_to_xds_attrs(image_full_path)
63
- mb = _multibeam_array(xds, image_full_path, False)
64
- if mb is not None:
65
- selectors = {}
66
- for k in ("time", "frequency", "polarization"):
67
- if k in block_des:
68
- selectors[k] = block_des[k]
69
- xds["BEAM"] = mb.isel(selectors)
65
+ beam = _get_beam(image_full_path, nchan, npol, False)
66
+ if beam is not None:
67
+ selectors = {
68
+ k: block_des[k]
69
+ for k in ("time", "frequency", "polarization")
70
+ if k in block_des
71
+ }
72
+ xds["BEAM"] = beam.isel(selectors)
70
73
  return xds
71
74
 
72
75
 
@@ -97,9 +100,11 @@ def _read_casa_image(
97
100
  # data var names are all caps by convention
98
101
  xds = _add_mask(xds, m.upper(), ary, dimorder)
99
102
  xds.attrs = _casa_image_to_xds_attrs(img_full_path)
100
- mb = _multibeam_array(xds, img_full_path, True)
101
- if mb is not None:
102
- xds["BEAM"] = mb
103
+ beam = _get_beam(
104
+ img_full_path, xds.dims["frequency"], xds.dims["polarization"], True
105
+ )
106
+ if beam is not None:
107
+ xds["BEAM"] = beam
103
108
  # xds = _add_coord_attrs(xds, ret["icoords"], ret["dir_axes"])
104
109
  xds = _dask_arrayize_dv(xds)
105
110
  return xds
@@ -159,7 +159,7 @@ def load_image(infile: str, block_des: dict = {}, do_sky_coords=True) -> xr.Data
159
159
  do_casa = False
160
160
  if do_casa:
161
161
  # comment next line when done debugging
162
- # return _load_casa_image_block(infile, bd, do_sky_coords)
162
+ # return _load_casa_image_block(infile, selection, do_sky_coords)
163
163
  try:
164
164
  return _load_casa_image_block(infile, selection, do_sky_coords)
165
165
  except Exception as e:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xradio
3
- Version: 0.0.53
3
+ Version: 0.0.55
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
File without changes
File without changes
File without changes
File without changes
File without changes