
    *i                     h   U d Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	m
Z
mZmZ ddlZddlZddlmZ ddlmZ ddlmZ dZd	Zd
hZdddZe	eef         ed<   daeed<   defdZ ej        g dg dg dg dgej                  Zdede fdZ!	 	 	 	 	 	 dTde
e         de
e         d e
e         d!e
e         d"e
e"         d#ee          d$e d%ed&e#d'e d(ede	eeej$        ee%         f         f         fd)Z&	 	 dUd+ed,ed-ed.e"d#ee          deej$        ee%         f         fd/Z'	 	 dVd1ed2e	eeej$                 f         d3e	ee f         d4ee	ee f                  d5e#dee	eeej$                 f         e	ee f         f         fd6Z(d1ed7ed8e d9e d:eej$                 ddfd;Z)	 dWd1ed<e
e         d=e d>e	eee%         f         d?ee%         d@ee	eej$        f                  dAe%dBe*dCeej$                 d2e	eeej$                 f         dDee	eef                  ddfdEZ+d1ed<e
e         d3e	ee f         dAe%d>e	eee%         f         ddfdFZ,dGed3e	ee f         ddfdHZ-dXdJede
e         fdKZ.	 	 	 	 	 	 dYdLedMee         d%ed&e#d'e d(edNe"de	ee f         fdOZ/	 	 	 	 	 	 	 dZdPedQee         d%ed&e#d'e dNe"dRee         d(eddfdSZ0dS )[a  Convert raw camera recordings to UnifiedDataset format.

Input:  a recording directory produced by ``rd record``.
Output: UnifiedDataset layout inside the same directory.

Usage::

    rd convert ./data/test_2/test_task_2_20260223_162246

Output layout::

    <recording_dir>/
        split_all.json
        metadata_shared.json
        calibration_results.json      # copied from the first recording dir
        0000/
            metadata.json
            rgb/
                scene_camera/
                    0000000000.png      # lossless PNG
                    0000000001.png
                    ...
                left_wrist_camera/
                    ...
            depth/
                scene_camera/
                    0000000000.npz      # np.uint16, millimetres
                    ...
            lowdim/
                scene_camera/
                    0000000000.npz      # intrinsics, extrinsics, action, language
                    0000000001.npz
                    ...
                left_wrist_camera/
                    ...
                right_wrist_camera/
                    ...
        cameras/                      # raw SVO2/bag files kept
        metadata.json                 # original recording metadata (updated: converted=true)
        robot_data.npz
    N)Path)AnyDictListOptionalTuple)tqdm)CAMERA_CONFIG)CameraConfig0000z.pngright_wrist_camerafollower_l_joint_posfollower_r_joint_pos)
left_wristright_wrist_ROLE_TO_JOINT_KEY_kinematicsreturnc                  ^    t            ddlm}  ddlm}  |  |            d          a t           S )Nr   )
Kinematics)get_yam_4310_linear_xml_path
grasp_site)r   i2rt.robots.kinematicsr   raiden._xml_pathsr   )r   r   s     ./home/robot-lab/raiden_cmu/raiden/converter.py_get_kinematicsr   I   sM    555555BBBBBB j!=!=!?!?NN    )              r   r   )r   r   r   r   )r   r         ?r   )r   r   r   r    dtypesvo_pathc                     ddl m} |                    | j        | d          }|                                }|                                 |S )zKReturn the total frame count of an SVO2 file without extracting any frames.r   	ZedCameraFcompute_sdk_depth)raiden.cameras.zedr&   from_svostemget_total_framesclose)r#   r&   camerans       r   _count_svo2_framesr0   k   sU    ,,,,,, x5QQF!!A
LLNNNHr   +P zedr       c64	svo_pathsnamesrgb_dirs
depth_dirsflips
max_framessync_threshold_nsstereo_method	ffs_scale	ffs_iterstri_stereo_variantc                   12345 ddl m1 ||z   D ]}|                    dd           |dk    }|dk    }|p|5d}|rVddlm}m}m} |                                r |            }n|                                r |            }n |||		          }n|rdd
l	m
}m} |                    |
          rN ||
          }	 |                                 |}n*# t          $ r}t          d| d           Y d}~nd}~ww xY w|>|                    |
          r ||
          }nddl	m} t          d|
 d|           15fdt%          ||           D             }i }5r1|                                D ]\  }}|                                ||<   d |                                D             4t          d4fd|D                         t+          t%          ||                    }t+          t%          ||                    }t+          t%          ||                    }d |D             }d}d |                                D             22fd|                                D             34r!t-          4                                          nd} t1          || nt3          | |          ddd          }!t5          2                                          rr|||k    rnh3fd|                                D             }"t-          |"                                          }#d}$|                                D ]t\  }}2|         rg|#|"|         z
  |k    rX|                                2|<   2|         r |                                3|         z
  |"|<   d}$2|         r|#|"|         z
  |k    Xut5          2                                          sny|$r|                                D ]\  }}|                                }%||         }&|&r$t=          j        |%j         t<          j!                  n|%j         }'t=          j"        tG          ||         |dtH           z            |'           5r||         \  }(})|%                    |%j         |&                                |(|)          }*|&rt=          j        |*t<          j!                  }*|*dz  '                    dd          (                    tR          j*                  }+n\|%j+        dz  '                    dd          (                    tR          j*                  }+|&rt=          j        |+t<          j!                  }+tS          j,        tG          ||         |dd z            |+!           ||         -                    |%j.                   |d"z  }|!/                    d"           5r?|d#z  dk    r6|j0        dk    r+|j1        |j0        z  d$z  },|!2                    |,d%d&           d' |                                D             2t5          2                                          r|!3                                 t          d(| d)           5rM|j0        dk    rB|rd*nd+|
4                                 }-t          d,|- d-|5                                            i }.|                                D ]\  }}d}/	 |6                                }/n# tn          $ r Y nw xY wtS          j8        ||         tR          j9        .          }0tS          j:        tG          ||         d/z            |0           |3                                 |0|/f|.|<   |.S )0u  Extract frames from multiple SVO2 files with cross-camera temporal alignment.

    On each output frame slot the algorithm selects the frame from every camera
    whose timestamp is closest to the latest camera in the group, skipping any
    frames that lag by more than *sync_threshold_ns*.  This guarantees that for
    any given output index N the timestamps across all cameras are within
    ``sync_threshold_ns`` of each other.

    Per-camera timestamps (int64, nanoseconds) are saved alongside images as
    ``rgb_dir/timestamps.npy`` for use during lowdim construction.

    Returns
    -------
    dict mapping camera name → (timestamps_ns np.ndarray, camera_info dict or None)
    r   r%   Tparentsexist_okffs
tri_stereoN)FFSDepthPredictorFFSOnnxDepthPredictorFFSTrtDepthPredictor)scaleiters)TRIStereoOnnxDepthPredictorTRIStereoTrtDepthPredictor)variantz![TRIStereo] TRT engine unusable (z), falling back to ONNX)WEIGHTS_HELPz'No TRI Stereo model found for variant 'z'. c                 J    i | ]\  }}|                     ||             S )r'   )r*   ).0namer#   r&   use_learned_stereos      r   
<dictcomp>z._extract_svo2_synchronized.<locals>.<dictcomp>   sQ     " " " D( 	i  (2D.D ! 
 
" " "r   c                 >    i | ]\  }}||                                 S  )r,   rP   rQ   cams      r   rS   z._extract_svo2_synchronized.<locals>.<dictcomp>   s*    OOOYT3D#..00OOOr   z  Frames per camera: c                 "    i | ]}||         S rU   rU   )rP   r/   total_framess     r   rS   z._extract_svo2_synchronized.<locals>.<dictcomp>   s    #F#F#F1A|A#F#F#Fr   c                     i | ]}|g S rU   rU   )rP   rQ   s     r   rS   z._extract_svo2_synchronized.<locals>.<dictcomp>   s    'C'C'CTb'C'C'Cr   c                 >    i | ]\  }}||                                 S rU   grabrV   s      r   rS   z._extract_svo2_synchronized.<locals>.<dictcomp>   s&    ===94dCHHJJ===r   c                 T    i | ]$\  }}||         r|                                 nd %S )r   get_frame_timestamp_ns)rP   rQ   rW   actives      r   rS   z._extract_svo2_synchronized.<locals>.<dictcomp>   sI          D# 	vd|Bs))+++     r   framez  extracting)totalunitdescdynamic_ncolsc                 R    i | ]#\  }}||                                 |         z
  $S rU   r_   )rP   rQ   rW   first_tss      r   rS   z._extract_svo2_synchronized.<locals>.<dictcomp>   sD     
 
 
c #,,..$?
 
 
r   F010d     @@  .npzdepth   
   i  z.0f)inf_msrefreshc                 >    i | ]\  }}||                                 S rU   r\   rV   s      r   rS   z._extract_svo2_synchronized.<locals>.<dictcomp>-  s&    AAAytS$

AAAr       z synchronized frames extractedFFSz
TRIStereo-z  z	 timing: r!   timestamps.npy);r)   r&   mkdirraiden.depth.ffsrF   rG   rH   engines_availablemodels_availableraiden.depth.tri_stereorK   rL   engine_available_ensure_loadedRuntimeErrorprintmodel_availablerN   zipitemsget_stereo_calibdictmaxvaluesr	   minallr]   r`   	get_framecv2rotatecolor
ROTATE_180imwritestr_IMG_EXTpredictget_right_colorclipastypenpuint16rn   savez_compressedappendtimestamp_nsupdate_n_calls_t_inferenceset_postfixr-   uppertiming_summaryget_camera_info	Exceptionarrayint64save)6r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   duse_ffsuse_tri_stereodepth_predictorrF   rG   rH   rK   rL   prederN   camsstereo_calibrQ   rW   rgb_dir_mapdepth_dir_mapflip_map
timestamps	frame_idx	ref_totalpbartsref_tsadvancedrb   flipr   fxbaselinedepth_mdepth_mmavg_inflabelresultscamera_infots_arrr&   ra   rh   rY   rR   s6                                                    @@@@@r   _extract_svo2_synchronizedr   w   s	   8 -,,,,,
" - -	t,,,,u$G"l2N 2N O %	
 	
 	
 	
 	
 	
 	
 	
 	
 	
  1133 	R2244OO"3355 	R3355OO//iyQQQOO	 	
 	
 	
 	
 	
 	
 	
 	

 &66?Q6RR 	V--6HIIIDV##%%%"& V V VT!TTTUUUUUUUUV"*::CU:VV 
"="=.# # # A@@@@@"&>P & &#& &  " " " " " "%33	" " "D 46L 8 	8 	8ID#!$!5!5!7!7LOO$**,,OOOL	
I#F#F#F#F#F#F#F
I
IJJJs5(++,,KUJ//00MCu%%&&H'C'CU'C'C'CJI >=

===F
            H
 /;AL''))***I%-ii3y*3M3M	  D fmmoo

 >B!i:&=&=
 
 
 
!ZZ\\
 
 
 RYY[[!!  	  	 ID#,  6BtH#47H#H#H"xxzzt$< M"99;;htnLBtH	 ,  6BtH#47H#H#H 6==??## 	 	  	8 	8ID#MMOOED>D?CTCJu{CN;;;EKK-90M0M80M0MMNNPUVVV! D+D1H *11K!4!4!6!6H   B!j#.AAG#f,221e<<CCBINN!K&066q%@@GG	RR D"z(CNCCHM$'Y*A*A*A*AABB(    t##E$67777Q	A 	E)b.A"5"5/:RUV:V:V%2_5MMPTTGw$4$4eDDD BADJJLLAAA} fmmoo

 >B@ 	JJLLL	
:
:
:
:;;; Go6:: O&O3E3K3K3M3M&O&OE5EE?#A#A#C#CEEFFF =?GZZ\\ . .	c	--//KK 	 	 	D	 *T*"(;;;
K%(88996BBB		-Ns*   C 
D #C;;D &[;;
\\Fbag_pathrgb_dir	depth_dirr   c                    	 ddl m} nA# t          $ r4 t          d           t	          j        g t          j                  dfcY S w xY w|                    dd           |                    dd           t          d| j         d	           |	                    | j
        |           }g }d}|                                rS|||k    rnI|                                }	|r$t          j        |	j        t          j                  n|	j        }
t          j        t%          ||d
t&           z            |
           |	j        dz                      dd                              t          j                  }|rt          j        |t          j                  }t	          j        t%          ||d
dz            |           |                    |	j                   |dz  }|dz  dk    rt          d| ddd           |                                St          d| d           t	          j        |t          j                  }t7          |          dk    rt9          |d                   t9          |d                   z
  dz  }|dk    rt7          |          dz
  |z  nd}t          d|dd|dd           t;          |dz
            dk    rt          d |dd!           d}	 |                                }n# t>          $ r Y nw xY w|                                  t	          j!        t%          |d"z            |           ||fS )#aq  Extract color and depth frames from a RealSense .bag file.

    Returns (timestamps_ns, camera_info).  timestamps_ns is an int64 array of
    per-frame wall-clock timestamps (nanoseconds since Unix epoch) saved by the
    RealSense SDK when global_time_enabled is set.  The array is also written to
    ``rgb_dir/timestamps.npy`` for caching across re-conversions.
    r   )RealSenseCamerau9     pyrealsense2 not installed – skipping .bag conversionr!   NTrA   z
  Opening  ...ri   rj   rk   rl   rm   ro   d   rt    frames)endflushz frames extracted              eAr   z    Actual FPS: z.1fz  duration: .2fs      >@g      @z    WARNING: FPS uD    deviates from expected 30 fps — check camera stream configurationrv   )"raiden.cameras.realsenser   ImportErrorr   r   r   r   rw   rQ   from_bagr+   r]   r   r   r   r   r   r   r   r   rn   r   r   r   r   r   r   lenintabsr   r   r-   r   )r   r   r   r   r:   r   r.   r   idxrb   r   r   r   
duration_s
actual_fpsr   s                   r   _extract_bagr   G  s   2<<<<<<< 2 2 2IJJJx"(+++T11112 MM$M...OOD4O000	
*x}
*
*
*+++%%hmX>>FJ
C
++-- =!cZ&7&7  "";?P
5;777U[CS"9"9x"9"99::EBBBK&(..q%88??	JJ 	<z(CN;;H
C	s,=,=,=,= =>>hOOOO%,---q9>>%%%%4t<<<<# ++-- =& 

1
1
1
1222Xj111F
6{{Q&*ooF1I6#=
7AA~~c&kkAo333
NNNNZNNNNOOOzD !!C''4JW 4 4 4  
 K,,..    LLNNNGC**++V444;s!   	 ;AA-L 
LLr   seq_dircam_timestampsframe_countscamera_start_times_ns
camera_fpsc                 j   dfd|                                 D             }t          |          dk    r t          d |                                D                       }t	          d |                                D                       }||k     rt          |          }t                    }	|                                 D ]s\  }
}t          t          j        ||                    }t          t          j        ||d                    }t          | |
|||           |||         ||
<   ||z
  |	|
<   tt          d||z
  d	z  d
d           ||	fS |rSt          |          dk    r?t	          |                                          fd|                                 D             }t          d |                                D                       rt          |          }t                    }	|                                 D ]W\  }
}|dk    r|
         }|}|                    |
          }t          | |
|||           |
|||         nd||
<   ||z
  |	|
<   Xd                    d |                                 D                       }t          d|            ||	fS |fS )u  Trim per-camera frames to their overlapping recording window.

    Strategy (tried in order):

    1. **Wall-clock timestamp alignment** — if every camera's ``timestamps.npy``
       contains Unix-epoch nanoseconds (> year 2020), find the common time range
       and trim each camera to it.  This is the most accurate method.

    2. **Recording start-time alignment** — fall back to ``camera_start_times_ns``
       from ``metadata.json`` (wall-clock time recorded just before each
       ``camera.start_recording()`` call).  The per-camera start offset in
       frames is ``(t_start[cam] - t_start_min) * fps / 1e9``.  Less accurate
       than per-frame timestamps but works even when bag timestamps are not
       wall-clock (e.g. RealSense hardware clock).

    Renames on-disk jpg/npz files so that frame 0 of every camera corresponds
    to the same point in time.

    Returns updated (cam_timestamps, frame_counts).
         sh,/ c                 x    i | ]6\  }}|t          |          dk    t          |d                   k    3||7S )Nr   )r   r   )rP   rQ   r   _WALL_CLOCK_MIN_NSs      r   rS   z/_align_cameras_by_timestamp.<locals>.<dictcomp>  sQ       D">c"ggkkc"Q%jj;M.M.M 	b.M.M.Mr      c              3   @   K   | ]}t          |d                    V  dS r   Nr   rP   r   s     r   	<genexpr>z._align_cameras_by_timestamp.<locals>.<genexpr>  s,      <<Rc"Q%jj<<<<<<r   c              3   @   K   | ]}t          |d                    V  dS )r   Nr   r   s     r   r   z._align_cameras_by_timestamp.<locals>.<genexpr>  s,      ;;BC2KK;;;;;;r   right)sidez%  Timestamp alignment: common window r   r   r   c           	      j    i | ]/\  }}|v 	|t          t          |z
  z  d z                      0S )r   )r   round)rP   rQ   tr   r   t_mins      r   rS   z/_align_cameras_by_timestamp.<locals>.<dictcomp>  sR     
 
 
a|## #eQY*4s:;;<<###r   c              3   "   K   | ]
}|d k    V  dS r   rU   )rP   offs     r   r   z._align_cameras_by_timestamp.<locals>.<genexpr>  s&      333sQw333333r   r   Nz, c              3   8   K   | ]\  }}|d k    | d| dV  dS )r   =frNrU   )rP   r/   r   s      r   r   z._align_cameras_by_timestamp.<locals>.<genexpr>  s?       $ $#)1ca1s$ $r   z   Start-time alignment: skipped )r   r   r   r   r   r   r   r   searchsorted_apply_camera_trimr   anygetjoin)r   r   r   r   r   wall_tst_startt_endnew_timestampsnew_frame_countsrQ   r   	start_idxend_idxoffsetsn_totaloffsets_strr   r   s     ` `            @@r   _align_cameras_by_timestampr    s@   : 3   &,,..  G 7||q<<7>>+;+;<<<<<;;'..*:*:;;;;;U??!.11N#L11#MMOO = =bG < <==	bob%gFFFGG"7D)WbIII'))G*;'<t$)09)< &&VC8OVVVV   "#333  4%:!;!;q!@!@)002233
 
 
 
 
 
06688
 
 

 33'.."2"233333 	4!.11N#L11#*==?? = =i>>&t,!#''--"7D)WbIII@Br)G*;'<'<TXt$)09)< &&)) $ $-4]]__$ $ $  K B[BBCCC!#333<''r   rQ   r  r  r   c           	         ||z
  }|dk    r| dz  |z  }| dz  |z  }t          |          D ]W}||z   }	|t          f|dffD ]B\  }
}|
|	d| z  }|
|d| z  }|                                r|                    |           CXt	          d| d| d|d	z  d
d           |5t          j        t          | dz  |z  dz            |||                    dS dS )z<Rename frame files and update timestamps.npy for one camera.r   rgbrn   rl   ri   z
  Aligned z
: skipped z leading frame(s) (~   r   zs)Nrv   )ranger   existsrenamer   r   r   r   )r   rQ   r  r  r   n_newr   r   isrcr   extsrc_fdst_fs                 r   r   r     sk    iE1}}E/D(g%,	 u 	( 	(Aa-C#X.F0CD ( (3s.....q,,s,,,<<>> (LL'''	(
 	( ( ( ( (R'( ( (	
 	
 	
 
~
%$&)99::y !	
 	
 	
 	
 	
 ~r   camerasn_framescamera_infoscalib
robot_datarec_metaflip_camerasright_base_to_left_basewrist_camera_joint_keysc           	      R  0123456789:;< d}d;|D ]f}|	                     |          }|Mt          |          |k    r:t          |d                   |k    r!|                    t          j                  ; ng;P|D ]M}|	                     |          }|4t          |          |k    r!|                    t          j                  ; nNd<|dk    r                     d          };7|5|j        t          j        k    r |                    t          j                  <nO|                     dd          }t	          j        d||d	          ;||                    t          j                  <d
t          dt          t          j                 f;<fd}dt          dt          j        dt          j        fd1i }|D ]}|                     |          }|s||v }|d         |d         }}|r|d         dz
  |z
  }|d         dz
  |z
  }t	          j        |d         d|gd|d         |gg dgt          j                  ||<   d6i }|D ]}||v }t	          j        dt          j                  }d}|rd|v r||d         v r|d         |         }d|v r	|d         }nd|v r|d         }|                     d          rvd|v rrd|v rnt	          j        |d         t          j                  |dd dd f<   t	          j        |d         t          j                                                  |dd d f<   d}|
pi                      |          }|r||                     d          rjg<d;at	          j        dt          j                  0t	          j        |d         t          j                  0dd dd f<   t	          j        |d         t          j                                                  0dd d f<   |r
0t"          z  0                     |          33t	          j        3;<fd!t'          3j        d                   D             d"                              t          j                  26t+                      6|                    d#          5t	          j        01256fd$t'          |          D                       }||nt	          j        |d         |ddf          ||<   d%  |d&           |d'          fD             }|rt	          j        |d"          nd}d}N<K;H6t+                      6g } d(D ]#\  }!}"|!v r|"vrt3          d)|! d*|" d+          $ |d,          77ot	          j        d- 167fd.t'          |          D             D                       }#|                     |#           |                     7ddd/d0f                     |d1          99ot	          j        d2 169fd3t'          |          D             D                       }$|                     |$           |                     9ddd/d0f                    | rt	          j        | d"          }d}%|"6t+                      6g }& |d&          88ot	          j        d4 168fd5t'          |          D             D                       }'|&                    |'           |&                    8ddd/d0f                     |d'          ::ot	          j        d6 16:fd7t'          |          D             D                       }(|&                    |(           |&                    :ddd/d0f                    |&rt	          j        |&d"          }%d8  |d,           |d1          fD             })|)rt	          j        |)d"          nd}*t	          j        |                     d9d:          t6                    }+t	          j        |                     d;d:          t6                    },| d<z  }-|-                    d=d=>           t'          |          D ]4|4fd?|                                D             d@}.||4         |.dA<   ||4         |.dB<   |%|%4         |.dC<   |*|*4         |.dD<   |+|.dE<   |,|.dF<   |.dG<   t=          |-4dHdIz  dJ          5 }/t?          j         |.|/           ddd           n# 1 swxY w Y   dS )Ku  Write seq_dir/lowdim.npz with all cameras' intrinsics/extrinsics plus joints, action, language.

    Output keys in lowdim.npz
    --------------------------
    Per-frame keys in each lowdim/<frame>.npz
    ------------------------------------------
    ``intrinsics``           dict[camera_name → (3, 3) float32]  camera matrix K per camera.
    ``extrinsics``           dict[camera_name → (4, 4) float32]  cam-to-left_arm_base.
                             Wrist cameras: computed per-frame via FK + hand-eye calibration.
                             Scene cameras: static calibrated extrinsics.
    ``joints``               (14,) float32  follower joint positions at this frame:
                             [left_arm(6), left_gripper(1), right_arm(6), right_gripper(1)].
    ``action``               (26,) float32  FK EE poses computed from commanded joint positions
                             (follower_*_joint_cmd), in the left_arm_base frame:
                             [l_pos(3), l_rot9(9), l_gripper(1), r_pos(3), r_rot9(9), r_gripper(1)].
    ``language_task``        str  task name.
    ``language_prompt``      str  task instruction.
    r   Nr   r   r   r    r   F)endpointkeyr   c                 (   d S                      |           d S j        dk    rd d d f         t          j        fdt	          j        d                   D             d                              t          j                  S )Nro   c           	      P    g | ]"}t          j        d d |f                   #S Nr   interp)rP   r   arrr   robot_tss     r   
<listcomp>z8_build_lowdim.<locals>.interp_to_cam.<locals>.<listcomp>\  s3    QQQRYvxQQQT33QQQr   axis)r   ndimr   stackr
  shaper   float32)r  r$  r   r  r%  s    @r   interp_to_camz$_build_lowdim.<locals>.interp_to_camS  s    !1V^4nnS!!;48q==aaag,CxQQQQQQU39Q<=P=PQQQ
 
 
 &

	r   kinqc                     | j         j        j        }t          |          |k     r6t	          j        |t          j                  }||dt          |          <   |}|                     |          S )z:Call FK, padding q with zeros to the model's nq if needed.r!   N)_configurationmodelnqr   r   zerosr,  fk)r.  r/  r3  q_fulls       r   _fkz_build_lowdim.<locals>._fk`  s^    %(q66B;;Xb
333F F8SVV8Avvayyr   cxcywidthro   heightr   fy)r   r   r    r!      r  hand_eye_calibration
extrinsicssuccessrotation_matrixtranslation_vector   c           	      P    g | ]"}t          j        d d |f                   #S r!  r"  )rP   r   arm_joints_rawr   r%  s     r   r&  z!_build_lowdim.<locals>.<listcomp>  sD        	&(N111a44HII  r   r'  
follower_rc                     g | ]m}r75 |                                        t          j                  z  z  n1 |                                        t          j                  z  nS r!  )r   r   r,  )rP   r  T_cam2eer7  
arm_jointsis_rightr.  r  s     r   r&  z!_build_lowdim.<locals>.<listcomp>  s     	 	 	  %U
 *A)L	 4!c#z!}55<<RZHHI&' '
 "c#z!}55<<RZHH8S	 	 	r   c                     g | ]}||S r!  rU   rP   ps     r   r&  z!_build_lowdim.<locals>.<listcomp>  s)        = 	

 ==r   follower_l_joint_pos_7dfollower_r_joint_pos_7d))r   follower_l_joint_cmd)r   follower_r_joint_cmdzrobot_data.npz contains 'z' but is missing 'zW'. The recording has no commanded poses and cannot be converted. Re-record the episode.rP  c           	          g | ]]}t          j        |d ddf         |d dd df                                         g                              t           j                  ^S NrC  r   concatenateflattenr   r,  rP   Ts     r   r&  z!_build_lowdim.<locals>.<listcomp>  o        NAbqb!eHaBQBi.?.?.A.A#BCCJJ2:VV  r   c              3   D   K   | ]} |d df                   V  d S N   rU   )rP   r  r7  r.  l_cmds     r   r   z _build_lowdim.<locals>.<genexpr>  ;      NNcc#uQU|44NNNNNNr   r\     rQ  c           	          g | ]]}t          j        |d ddf         |d dd df                                         g                              t           j                  ^S rS  rT  rW  s     r   r&  z!_build_lowdim.<locals>.<listcomp>  rY  r   c              3   D   K   | ]} |d df                   V  d S r[  rU   )rP   r  r7  r.  r_cmds     r   r   z _build_lowdim.<locals>.<genexpr>  r^  r   c           	          g | ]]}t          j        |d ddf         |d dd df                                         g                              t           j                  ^S rS  rT  rW  s     r   r&  z!_build_lowdim.<locals>.<listcomp>	  rY  r   c              3   D   K   | ]} |d df                   V  d S r[  rU   )rP   r  r7  r.  l_poss     r   r   z _build_lowdim.<locals>.<genexpr>  r^  r   c           	          g | ]]}t          j        |d ddf         |d dd df                                         g                              t           j                  ^S rS  rT  rW  s     r   r&  z!_build_lowdim.<locals>.<listcomp>  rY  r   c              3   D   K   | ]} |d df                   V  d S r[  rU   )rP   r  r7  r.  r_poss     r   r   z _build_lowdim.<locals>.<genexpr>  r^  r   c                     g | ]}||S r!  rU   rL  s     r   r&  z!_build_lowdim.<locals>.<listcomp>!  s)        = 	

 ==r   	task_name task_instructionlowdimTrA   c                 (    i | ]\  }}||         S rU   rU   )rP   rQ   ext_arrr  s      r   rS   z!_build_lowdim.<locals>.<dictcomp>7  s#    TTTg4TTTr   )
intrinsicsr?  jointsactionactual_posesaction_jointslanguage_tasklanguage_promptT_left_from_rightri   z.pklwb)!r   r   r   r   r   float64r"   r   linspacer   r   ndarrayr   r   r,  eyerV  _R_FLIP_180r*  r
  r+  r   
startswithtilerU  
ValueErrorr   objectrw   r   openpickledump)=r   r  r  r  r  r  r  r  r  r   r  r   rQ   r   robot_ts_rawdurationr-  rp  infor   r8  r9  r?  
static_exthe	cam_calibr  per_frame_ext	joint_keyjoints_partsrq  rr  action_parts_arm_key_cmd_keyl_posesr_posesrs  actual_partsl_actual_posesr_actual_posesaction_joints_partsrt  ru  rv  
lowdim_dir
frame_datafrH  r7  rI  rE  r  rJ  r.  r]  re  rb  rh  r   r%  s=        `  `                                       @@@@@@@@@@@@@r   _build_lowdimr    s   > 3 $(F  %%>c"gg11c"Q%jjCU6U6UYYrz**FE~ 	 	D##D))B~#b''X"5"52:..%)H(Q,,!~~l33("bh..#**2:66HH  ||L#66H[h5IIIF''..rz::3 8BJ#7          
     )+J 
 
%% 	|#dT$ZB 	+w-!#r)Bx.1$*B84j#r"S$t*b$9???K*
 
 

4 C(*J E
 E
|#VARZ000
 	 Y%''DE)4D,D,Di(.I%2256**-GGI&&
 )S00,33)+-.bj* * *Jrr2A2v& )+01) ) )gii rr1u% /3,277==	'	y!! &$"varz222H!x+<(=RZPPPHRaR!V h'(
  gii RaRUO  2#k1'^^I66N)X     !&~';A'>!?!?      &$$  ;)++C$//== "	 	 	 	 	 	 	 	 	 "'x	 	 	! ! ( MD)Ha+;<< 	4  M344M344
  L 1=F|!,,,,$  $(F("66;M;!##C#
 		 		Hh :%%(**D*D B B B B B B   455h NNNNNNeHooNNN   G (((aaa1f...455h NNNNNNeHooNNN   G (((aaa1f... 	:^Lq999F *.L;!##C788X NNNNNNeHooNNN   N ///aaa1f...788X NNNNNNeHooNNN   N ///aaa1f... 	@>,Q???L  M011M011
   8KT*3333PT 
 HX\\+r::&IIIMhx||,>CC6RRRO 8#JTD1118__ ' '$TTTTAQAQASASTTT&
 &

 #)!9Jx #)!9Jx #)5aJ~&$*7*:J'&3
?#(7
$%"..EJ*+*!.55 	'K
A&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'#' 's   9dd	"d	c                    d |                                 D             }t          d |                                D                       }t          |          dk    rt          |d                   }n#|rd |                                 D             }nd}|                    dd          |                    d	d          d
gdg d|||                    dd          |                    dd          |                    dd          gd|r!t          |                                          ndddiddddddidddddd|                    dd          d }|                    d!          r|d!         |d!<   |                    d"          r|d"         |d"<   |                    d#          r|d#         |d#<   t          | d$z  d%          5 }	t          j        ||	d&'           ddd           dS # 1 swxY w Y   dS )(z2Write metadata.json inside the sequence directory.c                 n    i | ]2\  }}|||                     d           |                     d          g3S )r;  r:  )r   )rP   rW   r  s      r   rS   z,_build_sequence_metadata.<locals>.<dictcomp>V  sQ       Cdhhx  $((7"3"34  r   c                 ,    h | ]}t          |          S rU   )tuple)rP   vs     r   	<setcomp>z+_build_sequence_metadata.<locals>.<setcomp>[  s    >>>AuQxx>>>r   ro   r   c                     i | ]\  }}||	S rU   rU   )rP   rW   r  s      r   rS   z,_build_sequence_metadata.<locals>.<dictcomp>_  s    ???ac1???r   Nrj  rk  	timestamprobotics)rQ   raw_idtags)r  rn   rr  languager   r	  rl  )taskprompt	extensionpngnpzFT)r  sparsemetricr2  pinhole	cam2world)	transformr  	joint_cmd   )formatdimscontrolleader)r  labelsr  
resolution	framerater  
num_framesr  rn   rp  r?  rr  r  event_markers
audio_fullaudio_segmentsmetadata.jsonwr   indent)	r   listr   r   r   r   r  jsonr  )
r   r  r   r  r  resolutions
unique_resr  metar  s
             r   _build_sequence_metadatar  N  s    %++--  K
 >>););)=)=>>>??J
:!!*Q-00

	 ??;+<+<+>+>???


 LLb11ll;33L
 

 988 \\,33LLb11||$6;;<
 
 5AGc,--//000aU#$FF	*$/4@@("55<<	844) D: ||O$$ : ( 9_||L!! 4%l3\||$%% <!)*:!;	g'	-	- %	$!$$$$% % % % % % % % % % % % % % % % % %s   G22G69G6rec_pathc                     |r!t          |                                          nd}i dd|dt          |id}t          | dz  d          5 }t	          j        ||d           d d d            d S # 1 swxY w Y   d S )	Nr   ro   n_seqs	n_samplesr  filterssizefilessplit_all.jsonr  r   r  )r   r   _SEQUENCE_NAMEr  r  r  )r  r   r  splitr  s        r   _build_splitr    s    -9@s<&&(()))qH1(CC (+ E
 
h))3	/	/ &1	%1%%%%& & & & & & & & & & & & & & & & & &s   
A//A36A3datadata_dirc                 ~   t          |           dz  }t          d |                                D             d d          }|s&t          d|            t	          j        d           d}d	 |D             d
dlm} |gt                    z   } ||ddd          }||v rd |D             S fd|D             S )zEUse fzf to select one or more task directories (Tab to multi-select).rawc              3      K   | ]E}|                                 t          d  |                                D                       A|V  FdS )c              3   l   K   | ]/}|                                 |d z                                  V  0dS r  Nis_dirr  )rP   subs     r   r   z)select_tasks.<locals>.<genexpr>.<genexpr>  s?      VV3VS9_,,..VVVVVVr   N)r  r   iterdirrP   r   s     r   r   zselect_tasks.<locals>.<genexpr>  sm       	
 	
xxzz	
 VV!))++VVVVV		
	
 	
 	
 	
 	
 	
r   c                 4    |                                  j        S r!  )statst_mtime)r   s    r   <lambda>zselect_tasks.<locals>.<lambda>  s    affhh' r   T)r  reversezNo tasks found in ro   z*** ALL TASKS ***c           	      |    i | ]9}|j          d t          d |                                D                        d|:S )z  (c              3   p   K   | ]1}|                                 |d z                                  -dV  2dS )r  ro   Nr  )rP   r   s     r   r   z*select_tasks.<locals>.<dictcomp>.<genexpr>  sD      \\AHHJJ\A	MCYCYC[C[\!\\\\\\r   z recording(s)))rQ   sumr  r  s     r   rS   z select_tasks.<locals>.<dictcomp>  s]        6llc\\QYY[[\\\\\lllno  r   r   )
fzf_selectzConvert task(s)> zZTab: toggle select  |  Enter: confirm  |  Select '*** ALL TASKS ***' to convert everything)r  multiheaderc                 ,    g | ]}t          |          S rU   r   r  s     r   r&  z select_tasks.<locals>.<listcomp>  s    ***1A***r   c                 :    g | ]}t          |                   S rU   r  )rP   r   r  s     r   r&  z select_tasks.<locals>.<listcomp>  s#    ---qCq	NN---r   )	r   sortedr  r   sysexitraiden.utilsr  r  )r  base	task_dirs
_ALL_LABELr  choicesselectedr  s          @r   select_tasksr    s*   >>E!D	
 	
\\^^	
 	
 	
 ('	 	 	I  )4))***$J   F
 ('''''lT&\\)Gz"k	  H X**	****----H----r   recording_direpisode_dir	reconvertc                   6789: t          |           }|                                s&t          d|            t          j        d           |dz  }|                                s&t          d|            t          j        d           t          |                    d                    }	t          |                    d                    }
|	s%|
s#t          d           t          j        d           |rt          |          n	|t          z  ::dz                                  r|st          d	:            i S :dz                                  r-|r+d
dl}|	                    :           t          d:            :
                    dd           t          d|j                    t          dt          |	           dt          |
           d           i }|dz  }|                                r;t          |          5 }t          j        |          }ddd           n# 1 swxY w Y   d}|dz  }|                                r)t!          j        |d          88fd8j        D             }d}|dz  }|                                r;t          |          5 }t          j        |          }ddd           n# 1 swxY w Y   d}|r^d|v rZ|d                             d          }|=t           j                            t!          j        |t           j                            }|t          d           i }i }i }d |	D             }|ot/          :fd|D                       }|r|D ]}:dz  |z  }t          t1          |                    d                              }t          d | d!| d"           |||<   d||<   t!          j        t3          |d#z                      ||<   n|	ri }|	D ]}|j        }:dz  |z  }|                                r3t          t1          |                    d                              ||<   Xt          d$|j         d%           t7          |          ||<   t          d&||          d'           |r!t9          |                                          nd} | t          d(|  d)           t          d*t          |	           d+           |d,k    r5d-}!|d.k    r|d/k    rd0| d1}!n|d2k    rd3| d1}!t          d4| |!            t=          |	|:fd5|D             :fd6|D             d7 |D             | ||||8
  
        }"|"                                D ]G\  }\  }#}$t          |#          ||<   |$||<   |#||<   t          d9| d:t          |#           d'           H|r!t9          |                                          nd}%|                    d;i           }&|
D ]}'|'j        }:dz  |z  }:d<z  |z  }(|                                rt          t1          |                    d                              }t          d | d!| d"           |||<   d||<   |d#z  })|)                                rPt!          j        t3          |)                    }#|&                    |          }*|*|#tA          |*          z   n|#||<   nd||<   |tB          v }+t          d*|'j         |+rd=nd-z              tE          |'||(|+|%>          \  }#}$t          |#          ||<   |$||<   |&                    |          }*t          |#          d
k    r|*|#tA          |*          z   n|#||<   nd||<   t          d9| d:t          |#           d?           tG          :|||                    d@          A          \  }}|rt9          |                                          77fdB|D             }7fdC|                                D             }|                                D ]\  }},:dz  |z  }:d<z  |z  }(tI          77dDz             D ]H}-|tJ          f|(dEffD ]8\  }.}/|.|-dF|/ z  }|                                r|&                                 8 I|,%t!          j'        t3          |d#z            |,           t1          |(                                          }0tS          tT                    669fdG|0D             }1t          dH           tW          :|07||||tB          |||1I           t          dJ7 d"           tY          :|0|||           t          dK           |dLz  }2|2-                                rt]          |2/                                          ri:dLz  }3t          j0        |2|3dM           t          t1          |3                    dN                              }4t          dO|4 dP|4dk    rdQnd- d1           |tc          ||           t          dR           t          j2        :dz  |dSz             t          dT           |                                r,t          j2        ||dz             t          dU| d1           nt          dV|            |                                rt          |          5 }t          j        |          }5ddd           n# 1 swxY w Y   d|5dW<   t          |dX          5 }t          j3        |5|dYZ           ddd           n# 1 swxY w Y   t          d[|r:n|            |S )\a  Convert a recording directory to UnifiedDataset format.

    When *episode_dir* is provided the sequence data is written there instead
    of ``recording_dir/0000``, and dataset-level files (split_all.json,
    metadata_shared.json, calibration_results.json) are skipped so the caller
    (e.g. :func:`convert_task`) can aggregate them.

    Returns per-camera frame counts, or an empty dict if already converted.
    Error: directory not found: ro   r  z$Error: no cameras/ sub-directory in z*.svo2z*.bagz(No .svo2 or .bag files found in cameras/r  zAlready converted: r   NzRemoved existing output: TrA   z
Converting to UnifiedDataset: z  Found z SVO2 file(s), z bag file(s)
r  zrobot_data.npzF)allow_picklec                 "    i | ]}||         S rU   rU   )rP   kr  s     r   rS   z%convert_recording.<locals>.<dictcomp>  s    333AaQ333r   calibration_results.jsonbimanual_transformr  r!   zn  Warning: bimanual_transform not found in calibration; right wrist extrinsics will be in right_arm_base framec                     g | ]	}|j         
S rU   )r+   rL  s     r   r&  z%convert_recording.<locals>.<listcomp>   s    ---Q!&---r   c              3      K   | ];}d z  |z                                   od z  |z  dz                                   V  <dS )r  rv   N)r  )rP   rQ   r   s     r   r   z$convert_recording.<locals>.<genexpr>!  sr       ' '  
54	'')) 	Au_t#&66>>@@' ' ' ' ' 'r   z*.png  Skipping z (already extracted, z frames)rv   z  Pre-scanning r   rt   r   z  Capping SVO2 extraction at z frames (min across cameras)
z  Extracting z SVO2 file(s) in sync ...r2   rk  rD   r    z (scale=)rE   z
 (variant=z  Stereo method: c                      g | ]
}d z  |z  S )r  rU   rP   r/   r   s     r   r&  z%convert_recording.<locals>.<listcomp>L  s"    >>>ago)>>>r   c                      g | ]
}d z  |z  S rm   rU   r  s     r   r&  z%convert_recording.<locals>.<listcomp>M  s#    BBB!')A-BBBr   c                      g | ]}|t           v S rU   )_FLIP_CAMERAS)rP   r/   s     r   r&  z%convert_recording.<locals>.<listcomp>N  s    :::!1%:::r   )
r5   r6   r7   r8   r9   r:   r<   r=   r>   r?   u     ✓ z: realsense_clock_offsetsrn   z
 (flipped))r   r:   z frames
r   )r   c                     i | ]}|S rU   rU   )rP   r   n_mins     r   rS   z%convert_recording.<locals>.<dictcomp>  s    777Q5777r   c                 4    i | ]\  }}||
|d          nd S r!  rU   )rP   r   r   r  s      r   rS   z%convert_recording.<locals>.<dictcomp>  s?     
 
 
2 bn6E6

$
 
 
r   r   rl   ri   c                 h    i | ].}                     |          xt          v  |t                   /S rU   )get_roler   )rP   rQ   cam_cfgroles     r   rS   z%convert_recording.<locals>.<dictcomp>  sJ     / / /$$T***D/AAA 	 &AAAr   z
Building lowdim...)r   r  r  r  r  r  r  r  r  r   r  u     ✓ lowdim/ (u     ✓ metadata.jsonaudio)dirs_exist_okz*.wavu     ✓ audio/ (z segmentr   u     ✓ split_all.jsonmetadata_shared.jsonu     ✓ metadata_shared.jsonu,     ✓ calibration_results.json (copied from z1  Warning: calibration_results.json not found at 	convertedr  r   r  u   
✓ UnifiedDataset ready: )4r   r  r   r  r  r  globr  shutilrmtreerw   rQ   r   r  r  loadr   r  r   linalginvr   r,  r   r  r   r+   r0   r   r   r   r   r   r  r   r  r
  r   unlinkr   keysr   r
   r  r  r  r   r  copytreer  copyr  );r  r  r<   r=   r>   r?   r  r  cameras_path
svo2_files	bag_files_shutilr  	meta_pathr  r  
robot_pathr  
calib_pathT_left_base_from_right_basematr   r  r   
svo2_namessvo2_all_donerQ   r   r/   
pre_countsr#   rgb_dir_checkmax_frames_svo2extrasync_resultsr   r  bag_max
rs_offsetsr   r   ts_pathclock_offsetr   r   r   r   r  r  r  src_audio_dirdst_audio_dirn_wavsr  r  r  r  r  r   s;                                                         @@@@@r   convert_recordingr9    s   $ M""H?? 7X77888i'L   ?X??@@@))(3344J|((1122I i 8999#.Md;H~4MG%!! 5) 5-G--...	
E/	!	!	#	# 5	 5    w3'33444MM$M...	
<X]
<
<===	
SS__
S
SS^^
S
S
STTT H?*I $)__ 	$y||H	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 37J,,J 4gju5553333333
 E66J !* 	!IaLLE	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!
 9= Y%..()--.GHH?*,)--BJ8W8W8W*X*X'"*|	
 	
 	

 $&L.0L68N
 .-*---J 3 ' ' ' ' ' ' ' $ $M  29 	L 	LDo,GDg..//00AFFF1FFFGGG!"L!%L#%73w9I/I+J+J#K#KN4  	L 
 *9%'
" 	8 	8H=D#eOd2M##%% 8#&tM,>,>w,G,G'H'H#I#I
4  ;;;;<<<#5h#?#?
4 6Z-66677776@J#j//11222d&____   	Hc*ooHHHIIIE!!E%%)s*:*:/9///,..:%7:::<m<U<<===1 >>>>:>>>BBBBzBBB::z:::&'1
 
 
 %1$6$6$8$8 	9 	9 D.64!$VL!%L#)N4 74773v;;7778888 -9Bc,%%''(((dG7<<J '7 '7}E/D(g%,	>> 	Dg..//00AFFF1FFFGGG!"L!%L 00G~~ ,W..)~~d332>2JFS....PV t$$ (,t$}$-hm--1M2NOOO#gyt
 
 
 ![[T!T
 "~~d++v;;??.:.F\****F 4   $(N4 5t55s6{{5556666 $?&ll+BCC	$ $ $ NL  =L''))**7777,777
 
 
 
'--//
 
 
 ',,.. 	= 	=HD"o,G')D0IUECK00   '2Y4GH  FAss.....Axxzz 



~G&6677<<<<$$&&''G =))G/ / / / // / / 

 !!!!" ;% 7    

+E
+
+
+,,, Wg|X|TTT	
    w&M N#m&;&;&=&=">"> N')}DIIIIT-,,W556677LvLLfkkssrLLLMMMX|,,,$%%%Go-x:P/PQQQ*+++ 	TK
H/I$IJJJNNNNOOOORjRRSSS  ))__ 	 9Q<<D	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  [)S!! 	)QIdAa((((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 

OK)MX
O
OPPPsH   H..H25H2'KKK&lll'mmmtask_dir
output_dirprocessed_basec                 
   t          |           }|                                s&t          d|            t          j        d           t          d |                                D                       }	|	s&t          d|            t          j        d           |rt          |          |j        z  }
n4|rt          |          |j        z  }
nt          d          dz  |j        z  }
|
                    dd           t          d	t          |	           d
|j                    t          d|
 d           i }	 ddl
m}  |            }n# t          $ r d}Y nw xY wg }d}|	D ]}d}d}|o	 |                    t          |                    }|9|                    dd          }t!          |                    dd                    }n# t          $ r Y nw xY w|dvr!t          d|j         d| d           |dz  }|r |st          d|j         d           |dz  }|                    |           |rt          d| d           |st          d           dS t          dt          |           d           t%          |          D ]o\  }}|d}|
|z  }t          d |dz    d!t          |           d"|j         d#| d!	           t'          t          |          t          |          |||||$          }|r%t)          |                                          ||<   ns|d%z  }|                                rUt-          |          5 }t/          j        |          }ddd           n# 1 swxY w Y   |                    d&d          ||<   nd||<   |c	 |                    t          |                    }|+|                    |d'         dt          |          (           ^# t          $ r Y kw xY wqt5          |                                          }t          |          }i |||d)|d*}t-          |
d+z  d,          5 }t/          j        ||d-.           ddd           n# 1 swxY w Y   t          d/| d0| d1           t9          t;          |                    }|
|z  d%z  }|                                r't=          j        ||
d2z             t          d3           |	d         d4z  } |                                 r't=          j        | |
d4z             t          d5           t          d6|
            dS )7u  Convert all recordings in a task directory into a single UnifiedDataset.

    Each recording becomes a numbered episode (0000, 0001, …) under *out_base*::

        <output_dir>/<task_name>/
            0000/
            0001/
            ...
            split_all.json
            metadata_shared.json
            calibration_results.json

    *output_dir* defaults to ``<task_parent>/processed_data``.
    r  ro   c              3   p   K   | ]1}|                                 |d z                                  -|V  2dS r  r  r  s     r   r   zconvert_task.<locals>.<genexpr>  s[        !((**:;i-9O9O9Q9Q	     r   z)Error: no recording directories found in r  	processedTrA   zFound z recording(s) in u   Output → 
r   )get_dbNunknownFstatuspendingr  )r@  rB  r  z	 (status=r  z. (already converted, use --reconvert to force)z	
Skipped z non-success recording(s).z$No successful recordings to convert.zConverting z successful recording(s)
04d[/z] u    → )r  r<   r=   r>   r?   r  r  r  id)r  converted_data_pathr  r  r  r  r   r  u   
✓ split_all.json (z episodes, z total frames)r  u   ✓ metadata_shared.jsonr  u   ✓ calibration_results.jsonu   
✓ Task dataset ready: ) r   r  r   r  r  r  r  rQ   rw   r   raiden.db.databaserA  r   get_demonstration_by_raw_pathr   r   boolr   	enumerater9  r   r   r  r  r  update_demonstrationr  r  nextiterr  r!  )!r:  r;  r<   r=   r>   r  r<  r?   	task_pathrecording_dirsout_baseepisode_frame_counts_get_db_dbsuccess_dirsskippedrec_dirrC  already_converteddemor  episode_nameep_dircounts	meta_filer  ep_metarY   n_epsr  first_ep
first_metafirst_calibs!                                    r   convert_taskre    s   0 XI 8Y88999  $$&&    N  E)EEFFF ?
##in4	 ?'').8<<+-	>NN4$N///	
I3~&&
I
I
I
IJJJ	
$
$
$
$%%%+-888888gii    LG! ) )!?88WFF#!XXh	::F(,TXXk5-I-I(J(J%   ///@@@v@@@AAAqLGG 	)y 	)ZglZZZ   qLGG(((( @>7>>>??? 4555	
EL))
E
E
EFFF-- % %
7zzL(Q!a%QQ#l++QQw|QQ,QQQRRR"LLF'1
 
 
  
	714V]]__1E1E .. 0I!! 7)__ +"illG+ + + + + + + + + + + + + + +5<[[q5Q5Q$\2256$\2 ?	88WFF#,,T
"&,/KK -   
      +224455L$%%E u,OO% E
 
h))3	/	/ &1	%1%%%%& & & & & & & & & & & & & & &	
Q5
Q
Q\
Q
Q
QRRR D-..//HH$6J *J+A ABBB())) #&@@K .K,F!FGGG,---	
1x
1
122222s\   ?E EE1AG
GGM33M7	:M7	 AO11
O?>O?Q55Q9<Q9)Nr1   r2   r    r3   r4   )FN)Nr   r!  )r  )Nr2   r    r3   r4   F)Nr2   r    r3   FNr4   )1__doc__r  r  r  r  pathlibr   typingr   r   r   r   r   r   numpyr   r	   raiden._configr
   raiden.camera_configr   r  r   r  r   r   __annotations__r   r   r   r,  r}  r   r0   rL  floatr{  r   r   r   r  r   setr  r  r  r  r9  re  rU   r   r   <module>ro     s  ( ( (T    



       3 3 3 3 3 3 3 3 3 3 3 3 3 3 



           ( ( ( ( ( ( - - - - - - && ))& & DcN    S        bh	 *  *	 	# 	 	 	 	$ !%'#M MDzM9M 4jM T
	M
 :M M M M M M M 
#uRZ$/0
01M M M Mh  $E EEE E 	E
 E 2:x~%&E E E Eb 7;W( W(W(hrz223W( sCx.W( $DcN3	W(
 W( 4Xbj))*DcN:;W( W( W( W(t



 
 	

 	
 

 
 
 
` 9=s' s's'#Ys' s' sHTN*+	s'
 D>s' c2:o./s' s' s' &bj1s' hrz223s' &d38n5s' 
s' s' s' s'v	:%:%#Y:% sCx.:% 	:%
 sHTN*+:% 
:% :% :% :%z&4 &tCH~ &$ & & & & $. $.3 $.DI $. $. $. $.\ "&#^ ^^#^ ^ 	^
 ^ ^ ^ 
#s(^^ ^ ^ ^F	 !%$(#\3 \3\3\3 \3 	\3
 \3 \3 SM\3 \3 
\3 \3 \3 \3 \3 \3r   