Open in Colab: https://colab.research.google.com/github/casangi/graph_viper/blob/master/docs/sd_tutorial.ipynb
[1]:
import toolviper
ms_file = "uid___A002_Xced5df_Xf9d9.small.ms"
toolviper.utils.data.download(file=ms_file)
[2026-01-22 09:00:33,472] INFO viperlog: Downloading from [cloudflare] ....
Download List ─────────────────────────────────── uid___A002_Xced5df_Xf9d9.small.ms
[2026-01-22 09:00:33,475] INFO viperlog: File exists: uid___A002_Xced5df_Xf9d9.small.ms
[2]:
# Code to start a Dask cluster with two workers and 1 thread each.
from toolviper.dask.client import local_client
# viper_client = local_client(cores=2, memory_limit="4GB",autorestrictor=True)
viper_client = local_client(serial_execution=True)
viper_client
[2026-01-22 09:00:33,514] INFO viperlog: Module path: /Users/jsteeb/miniforge3/envs/timg/lib/python3.13/site-packages/toolviper
[2026-01-22 09:00:33,519] WARNING viperlog: It is recommended that the local cache directory be set using the dask_local_dir parameter.
[2026-01-22 09:00:33,520] INFO viperlog: Running client in synchronous mode.
[3]:
from xradio.measurement_set import convert_msv2_to_processing_set
ps_store = ms_file.replace(".ms", ".ps.zarr")
convert_msv2_to_processing_set(
in_file=ms_file,
out_file=ps_store,
parallel_mode="partition",
persistence_mode="w",
)
[2026-01-22 09:00:34,878] INFO viperlog: Updated partition scheme used: ['DATA_DESC_ID', 'OBS_MODE', 'OBSERVATION_ID', 'EPHEMERIS_ID']
[2026-01-22 09:00:34,883] INFO viperlog: Number of partitions: 20
[2026-01-22 09:00:34,883] INFO viperlog: OBSERVATION_ID [0], DDI [0], STATE [10], FIELD [1], SCAN [2, 4, 6, 8, 10, 12, 14, 16, 18], EPHEMERIS [-1]
[2026-01-22 09:00:34,884] INFO viperlog: OBSERVATION_ID [0], DDI [1], STATE [10], FIELD [1], SCAN [2, 4, 6, 8, 10, 12, 14, 16, 18], EPHEMERIS [-1]
[2026-01-22 09:00:34,884] INFO viperlog: OBSERVATION_ID [0], DDI [2], STATE [10], FIELD [1], SCAN [2, 4, 6, 8, 10, 12, 14, 16, 18], EPHEMERIS [-1]
[2026-01-22 09:00:34,885] INFO viperlog: OBSERVATION_ID [0], DDI [3], STATE [10], FIELD [1], SCAN [2, 4, 6, 8, 10, 12, 14, 16, 18], EPHEMERIS [-1]
[2026-01-22 09:00:34,885] INFO viperlog: OBSERVATION_ID [0], DDI [0], STATE [11], FIELD [1], SCAN [2, 4, 6, 8, 10, 12, 14, 16, 18], EPHEMERIS [-1]
[2026-01-22 09:00:34,885] INFO viperlog: OBSERVATION_ID [0], DDI [1], STATE [11], FIELD [1], SCAN [2, 4, 6, 8, 10, 12, 14, 16, 18], EPHEMERIS [-1]
[2026-01-22 09:00:34,886] INFO viperlog: OBSERVATION_ID [0], DDI [2], STATE [11], FIELD [1], SCAN [2, 4, 6, 8, 10, 12, 14, 16, 18], EPHEMERIS [-1]
[2026-01-22 09:00:34,886] INFO viperlog: OBSERVATION_ID [0], DDI [3], STATE [11], FIELD [1], SCAN [2, 4, 6, 8, 10, 12, 14, 16, 18], EPHEMERIS [-1]
[2026-01-22 09:00:34,886] INFO viperlog: OBSERVATION_ID [0], DDI [0], STATE [12], FIELD [1], SCAN [2, 4, 6, 8, 10, 12, 14, 16, 18], EPHEMERIS [-1]
[2026-01-22 09:00:34,887] INFO viperlog: OBSERVATION_ID [0], DDI [1], STATE [12], FIELD [1], SCAN [2, 4, 6, 8, 10, 12, 14, 16, 18], EPHEMERIS [-1]
[2026-01-22 09:00:34,887] INFO viperlog: OBSERVATION_ID [0], DDI [2], STATE [12], FIELD [1], SCAN [2, 4, 6, 8, 10, 12, 14, 16, 18], EPHEMERIS [-1]
[2026-01-22 09:00:34,888] INFO viperlog: OBSERVATION_ID [0], DDI [3], STATE [12], FIELD [1], SCAN [2, 4, 6, 8, 10, 12, 14, 16, 18], EPHEMERIS [-1]
[2026-01-22 09:00:34,888] INFO viperlog: OBSERVATION_ID [0], DDI [0], STATE [13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53], FIELD [1], SCAN [3, 5, 7, 9, 11, 13, 15, 17], EPHEMERIS [-1]
[2026-01-22 09:00:34,888] INFO viperlog: OBSERVATION_ID [0], DDI [1], STATE [13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53], FIELD [1], SCAN [3, 5, 7, 9, 11, 13, 15, 17], EPHEMERIS [-1]
[2026-01-22 09:00:34,888] INFO viperlog: OBSERVATION_ID [0], DDI [2], STATE [13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53], FIELD [1], SCAN [3, 5, 7, 9, 11, 13, 15, 17], EPHEMERIS [-1]
[2026-01-22 09:00:34,889] INFO viperlog: OBSERVATION_ID [0], DDI [3], STATE [13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53], FIELD [1], SCAN [3, 5, 7, 9, 11, 13, 15, 17], EPHEMERIS [-1]
[2026-01-22 09:00:34,889] INFO viperlog: OBSERVATION_ID [0], DDI [0], STATE [14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52], FIELD [1], SCAN [3, 5, 7, 9, 11, 13, 15, 17], EPHEMERIS [-1]
[2026-01-22 09:00:34,889] INFO viperlog: OBSERVATION_ID [0], DDI [1], STATE [14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52], FIELD [1], SCAN [3, 5, 7, 9, 11, 13, 15, 17], EPHEMERIS [-1]
[2026-01-22 09:00:34,890] INFO viperlog: OBSERVATION_ID [0], DDI [2], STATE [14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52], FIELD [1], SCAN [3, 5, 7, 9, 11, 13, 15, 17], EPHEMERIS [-1]
[2026-01-22 09:00:34,890] INFO viperlog: OBSERVATION_ID [0], DDI [3], STATE [14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52], FIELD [1], SCAN [3, 5, 7, 9, 11, 13, 15, 17], EPHEMERIS [-1]
[4]:
from xradio.measurement_set import open_processing_set
import pandas as pd
pd.set_option('display.max_colwidth', 1000)
ps_xdt = open_processing_set(ps_store)
ps_xdt.xr_ps.summary()
[4]:
| name | scan_intents | shape | execution_block_UID | polarization | scan_name | spw_name | spw_intents | field_name | source_name | line_name | field_coords | session_reference_UID | scheduling_block_UID | project_UID | start_frequency | end_frequency | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | uid___A002_Xced5df_Xf9d9.small_00 | [CALIBRATE_ATMOSPHERE#OFF_SOURCE, CALIBRATE_WVR#OFF_SOURCE] | (135, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [10, 12, 14, 16, 18, 2, 4, 6, 8] | X1204293883#ALMA_RB_06#BB_1#SW-01#FULL_RES_0 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [CO_v_0_2_1(ID=3768101)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.295643e+11 | 2.295648e+11 |
| 1 | uid___A002_Xced5df_Xf9d9.small_01 | [CALIBRATE_ATMOSPHERE#OFF_SOURCE, CALIBRATE_WVR#OFF_SOURCE] | (135, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [10, 12, 14, 16, 18, 2, 4, 6, 8] | X1204293883#ALMA_RB_06#BB_2#SW-01#FULL_RES_1 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [Continuum(ID=0)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.320078e+11 | 2.320390e+11 |
| 2 | uid___A002_Xced5df_Xf9d9.small_02 | [CALIBRATE_ATMOSPHERE#OFF_SOURCE, CALIBRATE_WVR#OFF_SOURCE] | (135, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [10, 12, 14, 16, 18, 2, 4, 6, 8] | X1204293883#ALMA_RB_06#BB_3#SW-01#FULL_RES_2 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [H2CO_Continuum(ID=0)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.161367e+11 | 2.161406e+11 |
| 3 | uid___A002_Xced5df_Xf9d9.small_03 | [CALIBRATE_ATMOSPHERE#OFF_SOURCE, CALIBRATE_WVR#OFF_SOURCE] | (135, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [10, 12, 14, 16, 18, 2, 4, 6, 8] | X1204293883#ALMA_RB_06#BB_4#SW-01#FULL_RES_3 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [C18O_2_1(ID=3768339)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.179697e+11 | 2.179736e+11 |
| 4 | uid___A002_Xced5df_Xf9d9.small_04 | [CALIBRATE_ATMOSPHERE#AMBIENT, CALIBRATE_WVR#AMBIENT] | (135, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [10, 12, 14, 16, 18, 2, 4, 6, 8] | X1204293883#ALMA_RB_06#BB_1#SW-01#FULL_RES_0 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [CO_v_0_2_1(ID=3768101)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.295643e+11 | 2.295648e+11 |
| 5 | uid___A002_Xced5df_Xf9d9.small_05 | [CALIBRATE_ATMOSPHERE#AMBIENT, CALIBRATE_WVR#AMBIENT] | (135, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [10, 12, 14, 16, 18, 2, 4, 6, 8] | X1204293883#ALMA_RB_06#BB_2#SW-01#FULL_RES_1 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [Continuum(ID=0)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.320078e+11 | 2.320390e+11 |
| 6 | uid___A002_Xced5df_Xf9d9.small_06 | [CALIBRATE_ATMOSPHERE#AMBIENT, CALIBRATE_WVR#AMBIENT] | (135, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [10, 12, 14, 16, 18, 2, 4, 6, 8] | X1204293883#ALMA_RB_06#BB_3#SW-01#FULL_RES_2 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [H2CO_Continuum(ID=0)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.161367e+11 | 2.161406e+11 |
| 7 | uid___A002_Xced5df_Xf9d9.small_07 | [CALIBRATE_ATMOSPHERE#AMBIENT, CALIBRATE_WVR#AMBIENT] | (135, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [10, 12, 14, 16, 18, 2, 4, 6, 8] | X1204293883#ALMA_RB_06#BB_4#SW-01#FULL_RES_3 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [C18O_2_1(ID=3768339)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.179697e+11 | 2.179736e+11 |
| 8 | uid___A002_Xced5df_Xf9d9.small_08 | [CALIBRATE_ATMOSPHERE#HOT, CALIBRATE_WVR#HOT] | (135, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [10, 12, 14, 16, 18, 2, 4, 6, 8] | X1204293883#ALMA_RB_06#BB_1#SW-01#FULL_RES_0 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [CO_v_0_2_1(ID=3768101)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.295643e+11 | 2.295648e+11 |
| 9 | uid___A002_Xced5df_Xf9d9.small_09 | [CALIBRATE_ATMOSPHERE#HOT, CALIBRATE_WVR#HOT] | (135, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [10, 12, 14, 16, 18, 2, 4, 6, 8] | X1204293883#ALMA_RB_06#BB_2#SW-01#FULL_RES_1 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [Continuum(ID=0)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.320078e+11 | 2.320390e+11 |
| 10 | uid___A002_Xced5df_Xf9d9.small_10 | [CALIBRATE_ATMOSPHERE#HOT, CALIBRATE_WVR#HOT] | (135, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [10, 12, 14, 16, 18, 2, 4, 6, 8] | X1204293883#ALMA_RB_06#BB_3#SW-01#FULL_RES_2 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [H2CO_Continuum(ID=0)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.161367e+11 | 2.161406e+11 |
| 11 | uid___A002_Xced5df_Xf9d9.small_11 | [CALIBRATE_ATMOSPHERE#HOT, CALIBRATE_WVR#HOT] | (135, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [10, 12, 14, 16, 18, 2, 4, 6, 8] | X1204293883#ALMA_RB_06#BB_4#SW-01#FULL_RES_3 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [C18O_2_1(ID=3768339)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.179697e+11 | 2.179736e+11 |
| 12 | uid___A002_Xced5df_Xf9d9.small_12 | [OBSERVE_TARGET#OFF_SOURCE] | (2844, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [11, 13, 15, 17, 3, 5, 7, 9] | X1204293883#ALMA_RB_06#BB_1#SW-01#FULL_RES_0 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [CO_v_0_2_1(ID=3768101)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.295643e+11 | 2.295648e+11 |
| 13 | uid___A002_Xced5df_Xf9d9.small_13 | [OBSERVE_TARGET#OFF_SOURCE] | (2844, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [11, 13, 15, 17, 3, 5, 7, 9] | X1204293883#ALMA_RB_06#BB_2#SW-01#FULL_RES_1 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [Continuum(ID=0)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.320078e+11 | 2.320390e+11 |
| 14 | uid___A002_Xced5df_Xf9d9.small_14 | [OBSERVE_TARGET#OFF_SOURCE] | (2844, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [11, 13, 15, 17, 3, 5, 7, 9] | X1204293883#ALMA_RB_06#BB_3#SW-01#FULL_RES_2 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [H2CO_Continuum(ID=0)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.161367e+11 | 2.161406e+11 |
| 15 | uid___A002_Xced5df_Xf9d9.small_15 | [OBSERVE_TARGET#OFF_SOURCE] | (2844, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [11, 13, 15, 17, 3, 5, 7, 9] | X1204293883#ALMA_RB_06#BB_4#SW-01#FULL_RES_3 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [C18O_2_1(ID=3768339)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.179697e+11 | 2.179736e+11 |
| 16 | uid___A002_Xced5df_Xf9d9.small_16 | [OBSERVE_TARGET#ON_SOURCE] | (5850, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [11, 13, 15, 17, 3, 5, 7, 9] | X1204293883#ALMA_RB_06#BB_1#SW-01#FULL_RES_0 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [CO_v_0_2_1(ID=3768101)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.295643e+11 | 2.295648e+11 |
| 17 | uid___A002_Xced5df_Xf9d9.small_17 | [OBSERVE_TARGET#ON_SOURCE] | (5850, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [11, 13, 15, 17, 3, 5, 7, 9] | X1204293883#ALMA_RB_06#BB_2#SW-01#FULL_RES_1 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [Continuum(ID=0)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.320078e+11 | 2.320390e+11 |
| 18 | uid___A002_Xced5df_Xf9d9.small_18 | [OBSERVE_TARGET#ON_SOURCE] | (5850, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [11, 13, 15, 17, 3, 5, 7, 9] | X1204293883#ALMA_RB_06#BB_3#SW-01#FULL_RES_2 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [H2CO_Continuum(ID=0)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.161367e+11 | 2.161406e+11 |
| 19 | uid___A002_Xced5df_Xf9d9.small_19 | [OBSERVE_TARGET#ON_SOURCE] | (5850, 2, 3, 2) | uid://A002/Xced5df/Xf9d9 | [XX, YY] | [11, 13, 15, 17, 3, 5, 7, 9] | X1204293883#ALMA_RB_06#BB_4#SW-01#FULL_RES_3 | [UNSPECIFIED] | [NGC1097_1] | [NGC1097_1] | [C18O_2_1(ID=3768339)] | [icrs, 2h46m19.09s, -30d16m30.18s] | --- | uid://A001/X1284/X2621 | uid://A001/X1221/Xa61 | 2.179697e+11 | 2.179736e+11 |
[5]:
ps_xdt.xr_ps.get_combined_antenna_xds()
[5]:
<xarray.Dataset> Size: 73kB
Dimensions: (antenna_name: 2, cartesian_pos_label: 3,
receptor_label: 2, frequency: 12, polarization: 2,
time: 9099)
Coordinates:
* antenna_name (antenna_name) <U9 72B 'PM01_T703' 'PM02_T701'
* cartesian_pos_label (cartesian_pos_label) <U1 12B 'x' 'y' 'z'
* receptor_label (receptor_label) <U5 40B 'pol_0' 'pol_1'
* frequency (frequency) float64 96B 2.161e+11 ... 2.32e+11
* polarization (polarization) <U2 16B 'XX' 'YY'
* time (time) float64 73kB 1.53e+09 1.53e+09 ... 1.53e+09
mount (antenna_name) <U6 48B dask.array<chunksize=(2,), meta=np.ndarray>
polarization_type (antenna_name, receptor_label) <U1 16B dask.array<chunksize=(2, 2), meta=np.ndarray>
station_name (antenna_name) <U4 32B dask.array<chunksize=(2,), meta=np.ndarray>
telescope_name (antenna_name) <U4 32B dask.array<chunksize=(2,), meta=np.ndarray>
Data variables:
ANTENNA_DISH_DIAMETER (antenna_name) float64 16B dask.array<chunksize=(2,), meta=np.ndarray>
ANTENNA_POSITION (antenna_name, cartesian_pos_label) float64 48B dask.array<chunksize=(2, 3), meta=np.ndarray>
ANTENNA_RECEPTOR_ANGLE (antenna_name, receptor_label) float64 32B dask.array<chunksize=(2, 2), meta=np.ndarray>
Attributes:
overall_telescope_name: ALMA
relocatable_antennas: True
type: antenna[6]:
from graphviper.graph_tools.coordinate_utils import (
interpolate_data_coords_onto_parallel_coords, make_parallel_coord
)
from graphviper.graph_tools.coordinate_utils import make_frequency_coord
from toolviper.utils.display import dict_to_html
from IPython.display import HTML, display
parallel_coords ={}
coord = ps_xdt.xr_ps.get_combined_antenna_xds().antenna_name
n_chunks = len(coord)
parallel_coords["antenna_name"] = make_parallel_coord(coord=coord, n_chunks=n_chunks)
print("Parallel Coordinates - Antenna Name:")
display(HTML(dict_to_html(parallel_coords["antenna_name"])))
node_task_data_mapping = interpolate_data_coords_onto_parallel_coords(
parallel_coords, ps_xdt
)
print("Node Task Data Mapping:")
display(HTML(dict_to_html(node_task_data_mapping)))
Parallel Coordinates - Antenna Name:
data: ['PM01_T703' 'PM02_T701']
data_chunks
0: ['PM01_T703']
1: ['PM02_T701']
data_chunks_edges: [np.str_('PM01_T703'), np.str_('PM01_T703'), np.str_('PM02_T701'), np.str_('PM02_T701')]
dims: ('antenna_name',)
attrs
Node Task Data Mapping:
0
chunk_indices: (np.int64(0),)
parallel_dims: ['antenna_name']
data_selection
uid___A002_Xced5df_Xf9d9.small_00
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_01
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_02
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_03
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_04
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_05
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_06
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_07
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_08
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_09
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_10
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_11
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_12
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_13
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_14
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_15
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_16
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_17
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_18
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_19
antenna_name: slice(np.int64(0), np.int64(1), None)
task_coords
antenna_name
data: ['PM01_T703']
dims: ('antenna_name',)
attrs
1
chunk_indices: (np.int64(1),)
parallel_dims: ['antenna_name']
data_selection
uid___A002_Xced5df_Xf9d9.small_00
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_01
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_02
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_03
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_04
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_05
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_06
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_07
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_08
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_09
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_10
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_11
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_12
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_13
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_14
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_15
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_16
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_17
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_18
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_19
antenna_name: slice(np.int64(1), np.int64(2), None)
task_coords
antenna_name
data: ['PM02_T701']
dims: ('antenna_name',)
attrs
[7]:
import dask
from graphviper.graph_tools.map import map
from graphviper.graph_tools.generate_dask_workflow import generate_dask_workflow
from toolviper.utils.display import dict_to_html
from IPython.display import display, HTML
def my_func(input_params):
display(HTML(dict_to_html(input_params)))
print("*" * 30)
return input_params["test_input"]
input_params = {}
input_params["test_input"] = 42
viper_graph = map(
input_data=ps_xdt,
node_task_data_mapping=node_task_data_mapping,
node_task=my_func,
input_params=input_params,
)
dask_graph = generate_dask_workflow(viper_graph)
dask.visualize(dask_graph, filename="map_graph")
[7]:
[8]:
dask.compute(dask_graph)
test_input: 42
chunk_indices: (np.int64(0),)
parallel_dims: ['antenna_name']
data_selection
uid___A002_Xced5df_Xf9d9.small_00
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_01
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_02
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_03
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_04
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_05
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_06
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_07
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_08
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_09
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_10
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_11
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_12
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_13
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_14
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_15
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_16
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_17
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_18
antenna_name: slice(np.int64(0), np.int64(1), None)
uid___A002_Xced5df_Xf9d9.small_19
antenna_name: slice(np.int64(0), np.int64(1), None)
task_coords
antenna_name
data: ['PM01_T703']
dims: ('antenna_name',)
attrs
task_id: 0
input_data: None
date_time: None
******************************
test_input: 42
chunk_indices: (np.int64(1),)
parallel_dims: ['antenna_name']
data_selection
uid___A002_Xced5df_Xf9d9.small_00
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_01
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_02
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_03
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_04
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_05
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_06
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_07
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_08
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_09
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_10
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_11
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_12
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_13
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_14
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_15
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_16
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_17
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_18
antenna_name: slice(np.int64(1), np.int64(2), None)
uid___A002_Xced5df_Xf9d9.small_19
antenna_name: slice(np.int64(1), np.int64(2), None)
task_coords
antenna_name
data: ['PM02_T701']
dims: ('antenna_name',)
attrs
task_id: 1
input_data: None
date_time: None
******************************
[8]:
([42, 42],)