xradio 0.0.46__tar.gz → 0.0.48__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.46/src/xradio.egg-info → xradio-0.0.48}/PKG-INFO +4 -4
  2. {xradio-0.0.46 → xradio-0.0.48}/pyproject.toml +3 -3
  3. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/_utils/list_and_array.py +3 -1
  4. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/_utils/schema.py +3 -1
  5. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/conversion.py +50 -35
  6. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/create_field_and_source_xds.py +233 -150
  7. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/descr.py +1 -1
  8. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/msv4_info_dicts.py +5 -1
  9. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/msv4_sub_xdss.py +21 -22
  10. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/load_processing_set.py +2 -1
  11. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/processing_set.py +119 -93
  12. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/schema.py +189 -116
  13. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/sphinx/schema_table.py +12 -0
  14. {xradio-0.0.46 → xradio-0.0.48/src/xradio.egg-info}/PKG-INFO +4 -4
  15. {xradio-0.0.46 → xradio-0.0.48}/src/xradio.egg-info/requires.txt +1 -1
  16. {xradio-0.0.46 → xradio-0.0.48}/LICENSE.txt +0 -0
  17. {xradio-0.0.46 → xradio-0.0.48}/MANIFEST.in +0 -0
  18. {xradio-0.0.46 → xradio-0.0.48}/README.md +0 -0
  19. {xradio-0.0.46 → xradio-0.0.48}/setup.cfg +0 -0
  20. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/__init__.py +0 -0
  21. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/_utils/__init__.py +0 -0
  22. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/_utils/_casacore/tables.py +0 -0
  23. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/_utils/coord_math.py +0 -0
  24. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/_utils/dict_helpers.py +0 -0
  25. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/_utils/zarr/__init__.py +0 -0
  26. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/_utils/zarr/common.py +0 -0
  27. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/image/__init__.py +0 -0
  28. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/image/_util/__init__.py +0 -0
  29. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/image/_util/_casacore/__init__.py +0 -0
  30. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/image/_util/_casacore/common.py +0 -0
  31. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/image/_util/_casacore/xds_from_casacore.py +0 -0
  32. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/image/_util/_casacore/xds_to_casacore.py +0 -0
  33. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/image/_util/_fits/xds_from_fits.py +0 -0
  34. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/image/_util/_zarr/common.py +0 -0
  35. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/image/_util/_zarr/xds_from_zarr.py +0 -0
  36. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/image/_util/_zarr/xds_to_zarr.py +0 -0
  37. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/image/_util/_zarr/zarr_low_level.py +0 -0
  38. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/image/_util/casacore.py +0 -0
  39. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/image/_util/common.py +0 -0
  40. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/image/_util/fits.py +0 -0
  41. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/image/_util/image_factory.py +0 -0
  42. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/image/_util/zarr.py +0 -0
  43. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/image/image.py +0 -0
  44. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/__init__.py +0 -0
  45. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/__init__.py +0 -0
  46. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/_tables/load.py +0 -0
  47. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/_tables/load_main_table.py +0 -0
  48. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/_tables/read.py +0 -0
  49. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/_tables/read_main_table.py +0 -0
  50. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/_tables/read_subtables.py +0 -0
  51. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/_tables/table_query.py +0 -0
  52. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/_tables/write.py +0 -0
  53. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/_tables/write_exp_api.py +0 -0
  54. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/chunks.py +0 -0
  55. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/create_antenna_xds.py +0 -0
  56. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/msv2_msv3.py +0 -0
  57. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/msv2_to_msv4_meta.py +0 -0
  58. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/optimised_functions.py +0 -0
  59. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/partition_queries.py +0 -0
  60. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/partitions.py +0 -0
  61. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_msv2/subtables.py +0 -0
  62. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_utils/cds.py +0 -0
  63. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_utils/partition_attrs.py +0 -0
  64. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_utils/stokes_types.py +0 -0
  65. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_utils/xds_helper.py +0 -0
  66. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_zarr/encoding.py +0 -0
  67. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_zarr/read.py +0 -0
  68. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/_zarr/write.py +0 -0
  69. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/msv2.py +0 -0
  70. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/_utils/zarr.py +0 -0
  71. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/convert_msv2_to_processing_set.py +0 -0
  72. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/measurement_set_xds.py +0 -0
  73. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/measurement_set/open_processing_set.py +0 -0
  74. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/schema/__init__.py +0 -0
  75. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/schema/bases.py +0 -0
  76. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/schema/check.py +0 -0
  77. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/schema/dataclass.py +0 -0
  78. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/schema/metamodel.py +0 -0
  79. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/schema/typing.py +0 -0
  80. {xradio-0.0.46 → xradio-0.0.48}/src/xradio/sphinx/__init__.py +0 -0
  81. {xradio-0.0.46 → xradio-0.0.48}/src/xradio.egg-info/SOURCES.txt +0 -0
  82. {xradio-0.0.46 → xradio-0.0.48}/src/xradio.egg-info/dependency_links.txt +0 -0
  83. {xradio-0.0.46 → xradio-0.0.48}/src/xradio.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: xradio
3
- Version: 0.0.46
3
+ Version: 0.0.48
4
4
  Summary: Xarray Radio Astronomy Data IO
5
5
  Author-email: Jan-Willem Steeb <jsteeb@nrao.edu>
6
6
  License: BSD 3-Clause License
@@ -37,7 +37,7 @@ License: BSD 3-Clause License
37
37
  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
38
38
  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39
39
 
40
- Requires-Python: <3.13,>=3.9
40
+ Requires-Python: <3.14,>=3.9
41
41
  Description-Content-Type: text/markdown
42
42
  License-File: LICENSE.txt
43
43
  Requires-Dist: astropy
@@ -52,7 +52,7 @@ Requires-Dist: pytest-html
52
52
  Requires-Dist: s3fs
53
53
  Requires-Dist: scipy
54
54
  Requires-Dist: xarray
55
- Requires-Dist: zarr
55
+ Requires-Dist: zarr<3,>=2
56
56
  Requires-Dist: pyarrow
57
57
  Requires-Dist: python_casacore>=3.6.1; sys_platform != "darwin"
58
58
  Requires-Dist: typing_extensions; python_version < "3.10"
@@ -1,13 +1,13 @@
1
1
  [project]
2
2
  name = "xradio"
3
- version = "0.0.46"
3
+ version = "0.0.48"
4
4
  description = " Xarray Radio Astronomy Data IO"
5
5
  authors = [
6
6
  {name = "Jan-Willem Steeb", email="jsteeb@nrao.edu"},
7
7
  ]
8
8
  license = {file = "LICENSE.txt"}
9
9
  readme = "README.md"
10
- requires-python = ">= 3.9, < 3.13"
10
+ requires-python = ">= 3.9, < 3.14"
11
11
 
12
12
  dependencies = [
13
13
  'astropy',
@@ -22,7 +22,7 @@ dependencies = [
22
22
  's3fs',
23
23
  'scipy',
24
24
  'xarray',
25
- 'zarr',
25
+ 'zarr>=2,<3',
26
26
  'pyarrow',
27
27
  'python_casacore>=3.6.1; sys_platform != "darwin" ',
28
28
  'typing_extensions; python_version < "3.10"',
@@ -64,10 +64,12 @@ def to_list(x):
64
64
 
65
65
 
66
66
  def to_np_array(x):
67
- if isinstance(x, (list, np.ndarray)):
67
+ if isinstance(x, np.ndarray):
68
68
  if x.ndim == 0:
69
69
  return np.array([x.item()])
70
70
  return np.array(x) # needed for json serialization
71
+ elif isinstance(x, list):
72
+ return np.array(x)
71
73
  return np.array([x])
72
74
 
73
75
 
@@ -1,5 +1,6 @@
1
1
  import toolviper.utils.logger as logger
2
2
  import xarray as xr
3
+ from typing import Union
3
4
 
4
5
 
5
6
  def convert_generic_xds_to_xradio_schema(
@@ -7,6 +8,7 @@ def convert_generic_xds_to_xradio_schema(
7
8
  msv4_xds: xr.Dataset,
8
9
  to_new_data_variables: dict[str, list],
9
10
  to_new_coords: dict[str, list],
11
+ ref_code: Union[int, None] = None,
10
12
  ) -> xr.Dataset:
11
13
  """Converts a generic xarray Dataset to the xradio schema.
12
14
 
@@ -63,7 +65,7 @@ def convert_generic_xds_to_xradio_schema(
63
65
 
64
66
  if key in column_description:
65
67
  msv4_measure = column_description_casacore_to_msv4_measure(
66
- column_description[key]
68
+ column_description[key], ref_code
67
69
  )
68
70
  else:
69
71
  msv4_measure = None
@@ -423,7 +423,7 @@ def create_coordinates(
423
423
  "baseline_antenna1_id": ("baseline_id", baseline_ant1_id),
424
424
  "baseline_antenna2_id": ("baseline_id", baseline_ant2_id),
425
425
  "baseline_id": np.arange(len(baseline_ant1_id)),
426
- "scan_number": ("time", scan_id),
426
+ "scan_name": ("time", scan_id.astype(str)),
427
427
  "uvw_label": ["u", "v", "w"],
428
428
  }
429
429
 
@@ -1029,7 +1029,7 @@ def convert_and_write_partition(
1029
1029
  datetime.timezone.utc
1030
1030
  ).isoformat(),
1031
1031
  "xradio_version": importlib.metadata.version("xradio"),
1032
- "schema_version": "4.0.-9991",
1032
+ "schema_version": "4.0.-9989",
1033
1033
  "type": "visibility",
1034
1034
  }
1035
1035
  )
@@ -1112,10 +1112,6 @@ def convert_and_write_partition(
1112
1112
  [xds["baseline_antenna1_id"].data, xds["baseline_antenna2_id"].data]
1113
1113
  )
1114
1114
  )
1115
- if phase_cal_interpolate:
1116
- phase_cal_interp_time = xds.time.values
1117
- else:
1118
- phase_cal_interp_time = None
1119
1115
 
1120
1116
  ant_xds = create_antenna_xds(
1121
1117
  in_file,
@@ -1134,6 +1130,10 @@ def convert_and_write_partition(
1134
1130
  logger.debug("Time gain_curve xds " + str(time.time() - start))
1135
1131
 
1136
1132
  start = time.time()
1133
+ if phase_cal_interpolate:
1134
+ phase_cal_interp_time = xds.time.values
1135
+ else:
1136
+ phase_cal_interp_time = None
1137
1137
  phase_calibration_xds = create_phase_calibration_xds(
1138
1138
  in_file,
1139
1139
  xds.frequency.attrs["spectral_window_id"],
@@ -1143,17 +1143,6 @@ def convert_and_write_partition(
1143
1143
  )
1144
1144
  logger.debug("Time phase_calibration xds " + str(time.time() - start))
1145
1145
 
1146
- # Change antenna_ids to antenna_names
1147
- with_antenna_partitioning = "ANTENNA1" in partition_info
1148
- xds = antenna_ids_to_names(
1149
- xds, ant_xds, is_single_dish, with_antenna_partitioning
1150
- )
1151
- # but before, keep the name-id arrays, we need them for the pointing and weather xds
1152
- ant_xds_name_ids = ant_xds["antenna_name"].set_xindex("antenna_id")
1153
- ant_xds_station_name_ids = ant_xds["station"].set_xindex("antenna_id")
1154
- # No longer needed after converting to name.
1155
- ant_xds = ant_xds.drop_vars("antenna_id")
1156
-
1157
1146
  # Create system_calibration_xds
1158
1147
  start = time.time()
1159
1148
  if sys_cal_interpolate:
@@ -1163,11 +1152,22 @@ def convert_and_write_partition(
1163
1152
  system_calibration_xds = create_system_calibration_xds(
1164
1153
  in_file,
1165
1154
  xds.frequency,
1166
- ant_xds_name_ids,
1155
+ ant_xds,
1167
1156
  sys_cal_interp_time,
1168
1157
  )
1169
1158
  logger.debug("Time system_calibation " + str(time.time() - start))
1170
1159
 
1160
+ # Change antenna_ids to antenna_names
1161
+ with_antenna_partitioning = "ANTENNA1" in partition_info
1162
+ xds = antenna_ids_to_names(
1163
+ xds, ant_xds, is_single_dish, with_antenna_partitioning
1164
+ )
1165
+ # but before, keep the name-id arrays, we need them for the pointing and weather xds
1166
+ ant_xds_name_ids = ant_xds["antenna_name"].set_xindex("antenna_id")
1167
+ ant_xds_station_name_ids = ant_xds["station"].set_xindex("antenna_id")
1168
+ # No longer needed after converting to name.
1169
+ ant_xds = ant_xds.drop_vars("antenna_id")
1170
+
1171
1171
  # Create weather_xds
1172
1172
  start = time.time()
1173
1173
  weather_xds = create_weather_xds(in_file, ant_xds_station_name_ids)
@@ -1211,37 +1211,52 @@ def convert_and_write_partition(
1211
1211
  else:
1212
1212
  ephemeris_interp_time = None
1213
1213
 
1214
- if "FIELD_ID" not in partition_scheme:
1215
- field_id = np.full(time_baseline_shape, -42, dtype=int)
1216
- field_id[tidxs, bidxs] = tb_tool.getcol("FIELD_ID")
1217
- field_id = np.max(field_id, axis=1)
1218
- field_times = utime
1219
- else:
1220
- field_id = check_if_consistent(tb_tool.getcol("FIELD_ID"), "FIELD_ID")
1221
- field_times = None
1214
+ # if "FIELD_ID" not in partition_scheme:
1215
+ # field_id = np.full(time_baseline_shape, -42, dtype=int)
1216
+ # field_id[tidxs, bidxs] = tb_tool.getcol("FIELD_ID")
1217
+ # field_id = np.max(field_id, axis=1)
1218
+ # field_times = utime
1219
+ # else:
1220
+ # field_id = check_if_consistent(tb_tool.getcol("FIELD_ID"), "FIELD_ID")
1221
+ # field_times = None
1222
+
1223
+ field_id = np.full(
1224
+ time_baseline_shape, -42, dtype=int
1225
+ ) # -42 used for missing baselines
1226
+ field_id[tidxs, bidxs] = tb_tool.getcol("FIELD_ID")
1227
+ field_id = np.max(field_id, axis=1)
1228
+ field_times = xds.time.values
1222
1229
 
1223
1230
  # col_unique = unique_1d(col)
1224
1231
  # assert len(col_unique) == 1, col_name + " is not consistent."
1225
1232
  # return col_unique[0]
1226
1233
 
1227
- field_and_source_xds, source_id, _num_lines = create_field_and_source_xds(
1228
- in_file,
1229
- field_id,
1230
- xds.frequency.attrs["spectral_window_id"],
1231
- field_times,
1232
- is_single_dish,
1233
- time_min_max,
1234
- ephemeris_interp_time,
1234
+ field_and_source_xds, source_id, _num_lines, field_names = (
1235
+ create_field_and_source_xds(
1236
+ in_file,
1237
+ field_id,
1238
+ xds.frequency.attrs["spectral_window_id"],
1239
+ field_times,
1240
+ is_single_dish,
1241
+ time_min_max,
1242
+ ephemeris_interpolate,
1243
+ )
1235
1244
  )
1245
+
1236
1246
  logger.debug("Time field_and_source_xds " + str(time.time() - start))
1237
1247
 
1238
1248
  xds = fix_uvw_frame(xds, field_and_source_xds, is_single_dish)
1249
+ xds = xds.assign_coords({"field_name": ("time", field_names)})
1239
1250
 
1240
1251
  partition_info_misc_fields = {
1241
- "scan_id": scan_id,
1252
+ "scan_name": xds.coords["scan_name"].data,
1242
1253
  "intents": intents,
1243
1254
  "taql_where": taql_where,
1244
1255
  }
1256
+ if with_antenna_partitioning:
1257
+ partition_info_misc_fields["antenna_name"] = xds.coords[
1258
+ "antenna_name"
1259
+ ].data[0]
1245
1260
  info_dicts = create_info_dicts(
1246
1261
  in_file, xds, field_and_source_xds, partition_info_misc_fields, tb_tool
1247
1262
  )