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]:
_images/sd_tutorial_6_0.png
[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],)