ó
    Eñiæ;  ã                   óâ   • S SK r S SKrS SKrS SKJrJrJrJr  S SKrSSK	J
r
  \" S5      rS rSS\R                  S\S	\S
\S\R                  4
S jjr " S S5      rS\S\4S jr " S S5      rg)é    N)ÚAnyÚOptionalÚTypeVarÚUnioné   )ÚtqdmÚTc                  óB   •  SS K n U $ ! [         a    [        S5      ef = f)Nr   zÅVideo decoding capabilities were removed from torchvision and migrated to TorchCodec. Please install TorchCodec following instructions at https://github.com/pytorch/torchcodec#installing-torchcodec)Ú
torchcodecÚImportError)r   s    Ú]/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/datasets/video_utils.pyÚ_get_torchcodecr      s6   € ð
Ûð Ðøô ó 
ÜðJó
ð 	
ð
ús   ‚ ˆÚtensorÚsizeÚstepÚdilationÚreturnc                 ó&  • U R                  5       S:w  a  [        SU R                  5        35      eU R                  S5      nU R                  5       nX$-  X4-  4nXSUS-
  -  S-   -
  U-  S-   U4nUS   S:  a  SU4n[        R
                  " XU5      $ )zè
similar to tensor.unfold, but with the dilation
and specialized for 1d tensors

Returns all consecutive windows of `size` elements, with
`step` between windows. The distance between each element
in a window is given by `dilation`.
r   z*tensor should have 1 dimension instead of r   )ÚdimÚ
ValueErrorÚstrideÚnumelÚtorchÚ
as_strided)r   r   r   r   Úo_strider   Ú
new_strideÚnew_sizes           r   Úunfoldr      sŸ   € ð ‡z�zƒ|�qÓÜÐEÀfÇjÁjÃlÀ^ÐTÓUÐUØ�}‰}˜QÓ€HØ�L‰L‹N€EØ‘/ 8Ñ#6Ð7€JØ d¨Q¡hÑ/°!Ñ3Ñ4¸Ñ=ÀÑAÀ4ÐH€HØ��{�QƒØ�t�9ˆÜ×Ò˜F¨jÓ9Ð9ó    c                   óf   • \ rS rSrSrS\\   SS4S jrS\4S jr	S\S\
\\   \\   4   4S	 jrS
rg)Ú_VideoTimestampsDataseté-   zÆ
Dataset used to parallelize the reading of the timestamps
of a list of videos, given their paths in the filesystem.

Used in VideoClips and defined at top level, so it can be
pickled when forking.
Úvideo_pathsr   Nc                 ó   • Xl         g ©N©r#   )Úselfr#   s     r   Ú__init__Ú _VideoTimestampsDataset.__init__6   s   € Ø&Õr   c                 ó,   • [        U R                  5      $ r%   ©Úlenr#   ©r'   s    r   Ú__len__Ú_VideoTimestampsDataset.__len__9   ó   € Ü�4×#Ñ#Ó$Ð$r   Úidxc                 óê   • [        5       nUR                  R                  U R                  U   5      nUR                  R
                  nUR                  R                  n[        [        U5      5      U4$ r%   )	r   ÚdecodersÚVideoDecoderr#   ÚmetadataÚ
num_framesÚaverage_fpsÚlistÚrange)r'   r1   r   Údecoderr6   Úfpss         r   Ú__getitem__Ú#_VideoTimestampsDataset.__getitem__<   sb   € Ü$Ó&ˆ
Ø×%Ñ%×2Ñ2°4×3CÑ3CÀCÑ3HÓIˆØ×%Ñ%×0Ñ0ˆ
Ø×Ñ×*Ñ*ˆÜ”E˜*Ó%Ó&¨Ð+Ð+r   r&   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r8   Ústrr(   Úintr.   Útupler   Úfloatr<   Ú__static_attributes__© r   r   r!   r!   -   sO   † ñð' D¨¡Ið '°$ô 'ð%˜ô %ð,˜sð , u¨T°#©Y¸À¹Ð-GÑ'H÷ ,r   r!   Úxc                 ó   • U $ )z@
Dummy collate function to be used with _VideoTimestampsDataset
rH   )rI   s    r   Ú_collate_fnrK   D   s	   € ð €Hr   c                   ó¸  • \ rS rSrSr            S,S\\   S\S\S\\	   S\\
\\4      S	\S
\S\S\S\S\S\S\SS4S jjrS-S jrS\
\\4   SS4S jr\S\
\\4   4S j5       rS\\   SS 4S jr\ S.S\R(                  S\S\S\\	   S\\	   S\\R(                  \\\   \R(                  4   4   4S jj5       rS.S\S\S\\	   SS4S jjrS\4S jrS\4S  jrS\4S! jrS"\S\\\4   4S# jr\S\S$\	S%\	S\\\R(                  4   4S& j5       rS"\S\\R(                  \R(                  \
\\4   \4   4S' jrS\
\\4   4S( jr S)\
\\4   SS4S* jr!S+r"g)/Ú
VideoClipséK   añ  
Given a list of video files, computes all consecutive subvideos of size
`clip_length_in_frames`, where the distance between each subvideo in the
same video is defined by `frames_between_clips`.
If `frame_rate` is specified, it will also resample all the videos to have
the same frame rate, and the clips will refer to this frame rate.

Creating this instance the first time is time-consuming, as it needs to
decode all the videos in `video_paths`. It is recommended that you
cache the results after instantiation of the class.

Recreating the clips for different clip lengths is fast, and can be done
with the `compute_clips` method.

Args:
    video_paths (List[str]): paths to the video files
    clip_length_in_frames (int): size of a clip in number of frames
    frames_between_clips (int): step (in frames) between each clip
    frame_rate (float, optional): if specified, it will resample the video
        so that it has `frame_rate`, and then the clips will be defined
        on the resampled video
    num_workers (int): how many subprocesses to use for data loading.
        0 means that the data will be loaded in the main process. (default: 0)
    output_format (str): The format of the output video tensors. Can be either "THWC" (default) or "TCHW".
Nr#   Úclip_length_in_framesÚframes_between_clipsÚ
frame_rateÚ_precomputed_metadataÚnum_workersÚ_video_widthÚ_video_heightÚ_video_min_dimensionÚ_video_max_dimensionÚ_audio_samplesÚ_audio_channelsÚoutput_formatr   c                 ó:  • Xl         X`l        Xpl        X€l        X�l        X l        X°l        XÀl        UR                  5       U l	        U R                  S;  a  [        SU S35      eUc  U R                  5         OU R                  U5        U R                  X#U5        g )N)ÚTHWCÚTCHWz5output_format should be either 'THWC' or 'TCHW', got Ú.)r#   rS   rT   rU   rV   rW   rX   rY   ÚupperrZ   r   Ú_compute_frame_ptsÚ_init_from_metadataÚcompute_clips)r'   r#   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   s                 r   r(   ÚVideoClips.__init__f   s    € ð" 'ÔØ&Ôð )ÔØ*ÔØ$8Ô!Ø$8Ô!Ø,ÔØ.ÔØ*×0Ñ0Ó2ˆÔØ×ÑÐ%5Ó5ÜÐTÐUbÐTcÐcdÐeÓfÐfà Ñ(Ø×#Ñ#Õ%à×$Ñ$Ð%:Ô;Ø×ÑÐ0È
ÕSr   c           
      ó0  • / U l         / U l        SS KnUR                  R                  R                  [        U R                  5      SU R                  [        S9n[        [        U5      S9 nU H†  nUR                  S5        [        [        U6 5      u  pVU Vs/ s H  oqR                  " XqR                   S9PM     nnU R                   R#                  U5        U R                  R#                  U5        Mˆ     S S S 5        g s  snf ! , (       d  f       g = f)Nr   é   )Ú
batch_sizerS   Ú
collate_fn)Útotalr   ©Údtype)Ú	video_ptsÚ	video_fpsÚtorch.utils.dataÚutilsÚdataÚ
DataLoaderr!   r#   rS   rK   r   r,   Úupdater8   ÚzipÚ	as_tensorÚlongÚextend)r'   r   ÚdlÚpbarÚbatchÚ	batch_ptsÚ	batch_fpsÚptss           r   r`   ÚVideoClips._compute_frame_pts‹   sæ   € ØˆŒØ&(ˆŒó 	 à*/¯+©+×*:Ñ*:×*EÑ*EÜ# D×$4Ñ$4Ó5ØØ×(Ñ(Ü"ð	 +Fð +
ˆô œ˜B›Ò  DÛ�Ø—‘˜A”Ü'+¬C°¨KÓ'8Ñ$�	ñ PYÓYÊyÈŸ_š_¨S¿
¹
ÔCÉy�	ÐYØ—‘×%Ñ% iÔ0Ø—‘×%Ñ% iÖ0ñ ÷ !Ð ùò Z÷ !Õ ús   Á,.DÂ#DÂ=<DÄDÄ
Dr5   c                 óÜ   • US   U l         [        U R                   5      [        US   5      :X  d   eUS   U l        [        U R                   5      [        US   5      :X  d   eUS   U l        g )Nr#   rk   rl   )r#   r,   rk   rl   )r'   r5   s     r   ra   ÚVideoClips._init_from_metadata¥   sm   € Ø# MÑ2ˆÔÜ�4×#Ñ#Ó$¬¨H°[Ñ,AÓ(BÓBÐBÐBØ! +Ñ.ˆŒÜ�4×#Ñ#Ó$¬¨H°[Ñ,AÓ(BÓBÐBÐBØ! +Ñ.ˆ�r   c                 óN   • U R                   U R                  U R                  S.nU$ )N©r#   rk   rl   r€   )r'   Ú	_metadatas     r   r5   ÚVideoClips.metadata¬   s*   € ð  ×+Ñ+ØŸ™ØŸ™ñ
ˆ	ð
 Ðr   Úindicesc                 óò  • U Vs/ s H  o R                   U   PM     nnU Vs/ s H  o R                  U   PM     nnU Vs/ s H  o R                  U   PM     nnUUUS.n[        U 5      " UU R                  U R
                  U R                  UU R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  S9$ s  snf s  snf s  snf )Nr€   )rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   )r#   rk   rl   Útyper6   r   rQ   rS   rT   rU   rV   rW   rX   rY   rZ   )r'   rƒ   Úir#   rk   rl   r5   s          r   ÚsubsetÚVideoClips.subsetµ   sæ   € Ù4;Ó<²G¨q×'Ñ'¨Ô*±GˆÐ<Ù07Ó8²¨1—^‘^ AÔ&±ˆ	Ð8Ù07Ó8²¨1—^‘^ AÔ&±ˆ	Ð8à&Ø"Ø"ñ
ˆô
 �DŒzØØ"&§/¡/Ø!%§¡Ø—‘Ø"*Ø×(Ñ(Ø×*Ñ*Ø×,Ñ,Ø!%×!:Ñ!:Ø!%×!:Ñ!:Ø×.Ñ.Ø ×0Ñ0Ø×,Ñ,ñ
ð 	
ùò =ùÚ8ùÚ8s   …C*£C/ÁC4rk   r6   r   r;   c                 ó€  • Uc  SnUc  Un[        U 5      U-  U-  n[        R                  [        [        R
                  " U5      5      X45      nX   n [        XU5      nUR                  5       (       d  [        R                  " S5        [        U[        5      (       a  U/[        U5      -  nXx4$ [        XaU5      nXx4$ )Nr   z¥There aren't enough frames in the current video to get a clip for the given clip length and frames between clips. The video (and potentially others) will be skipped.)r,   rM   Ú_resample_video_idxrD   ÚmathÚfloorr   r   ÚwarningsÚwarnÚ
isinstanceÚslice)	rk   r6   r   r;   rQ   Útotal_framesÚ_idxsÚclipsÚidxss	            r   Úcompute_clips_for_videoÚ"VideoClips.compute_clips_for_videoÎ   s¾   € ð ‰;ð ˆCØÑØˆJÜ˜9“~¨
Ñ2°SÑ8ˆÜ×.Ñ.¬s´4·:²:¸lÓ3KÓ/LÈcÓ^ˆØÑ$ˆ	Ü�y¨dÓ3ˆØ�{‰{�}‰}Ü�MŠMð\ôô
 �eœU×#Ñ#Ø�7œS ›ZÑ'ˆDð ˆ{Ðô ˜%¨TÓ2ˆDØˆ{Ðr   c                 óò  • Xl         X l        X0l        / U l        / U l        [        U R                  U R                  5       HP  u  pEU R                  XAX%U5      u  pgU R                  R                  U5        U R                  R                  U5        MR     [        R                  " U R                   Vs/ s H  n[        U5      PM     sn5      n	U	R                  S5      R                  5       U l        gs  snf )aD  
Compute all consecutive sequences of clips from video_pts.
Always returns clips of size `num_frames`, meaning that the
last few frames in a video can potentially be dropped.

Args:
    num_frames (int): number of frames for the clip
    step (int): distance between two clips
    frame_rate (int, optional): The frame rate
r   N)r6   r   rQ   r“   Úresampling_idxsrr   rk   rl   r•   Úappendr   rs   r,   ÚcumsumÚtolistÚcumulative_sizes)
r'   r6   r   rQ   rk   r;   r“   r”   ÚvÚclip_lengthss
             r   rb   ÚVideoClips.compute_clipsè   sÄ   € ð %ŒØŒ	Ø$ŒØˆŒ
Ø!ˆÔÜ! $§.¡.°$·.±.ÖA‰NˆIØ×6Ñ6°yÈdÐYcÓd‰KˆEØ�J‰J×Ñ˜eÔ$Ø× Ñ ×'Ñ'¨Ö-ñ Bô —’¸¿
º
Ó'Cº
°1¬¨A®¹
Ñ'CÓDˆØ ,× 3Ñ 3°AÓ 6× =Ñ =Ó ?ˆÕùò (Ds   Â3C4c                 ó"   • U R                  5       $ r%   )Ú	num_clipsr-   s    r   r.   ÚVideoClips.__len__ÿ   s   € Ø�~‰~ÓÐr   c                 ó,   • [        U R                  5      $ r%   r+   r-   s    r   Ú
num_videosÚVideoClips.num_videos  r0   r   c                 ó    • U R                   S   $ )z:
Number of subclips that are available in the video list.
éÿÿÿÿ)rœ   r-   s    r   r¡   ÚVideoClips.num_clips  s   € ð ×$Ñ$ RÑ(Ð(r   r1   c                 óˆ   • [         R                  " U R                  U5      nUS:X  a  UnX#4$ XR                  US-
     -
  nX#4$ )z_
Converts a flattened representation of the indices into a video_idx, clip_idx
representation.
r   r   )ÚbisectÚbisect_rightrœ   )r'   r1   Ú	video_idxÚclip_idxs       r   Úget_clip_locationÚVideoClips.get_clip_location  sU   € ô
 ×'Ò'¨×(=Ñ(=¸sÓCˆ	Ø˜‹>ØˆHð Ð"Ð"ð ×2Ñ2°9¸q±=ÑAÑAˆHØÐ"Ð"r   Úoriginal_fpsÚnew_fpsc                 ó  • X-  nUR                  5       (       a  [        U5      n[        S S U5      $ [        R                  " U [        R
                  S9U-  nUR                  5       R                  [        R                  5      nU$ )Nri   )	Ú
is_integerrD   r�   r   ÚarangeÚfloat32rŒ   ÚtoÚint64)r6   r°   r±   r   r”   s        r   rŠ   ÚVideoClips._resample_video_idx  sg   € àÑ%ˆØ�?‰?×Ñô �t“9ˆDÜ˜˜t TÓ*Ð*Ü�|Š|˜J¬e¯m©mÑ<¸tÑCˆØ�z‰z‹|�‰œuŸ{™{Ó+ˆØˆr   c           	      ó\  • XR                  5       :¼  a   [        SU SU R                  5        S35      eU R                  U5      u  p#U R                  U   nU R                  U   U   n[        US   R                  5       5      n[        US   R                  5       5      n[        5       nU R                  S:X  a  SOSn	UR                  R                  XIS	9n
U
R                  [        [        XgS
-   5      5      S9R                  nU
R                  R                   nXl-  nUS
-   U-  n UR                  R#                  U5      nUR%                  XÞS9nUR                  nSU0nU R.                  bM  U R0                  U   U   n[3        U[(        R4                  5      (       a  UUS   -
  nUU   nU R.                  US'   [7        U5      U R8                  :X  d    UR:                   SU R8                   35       eUUUU4$ ! [&         a&    [(        R*                  " S[(        R,                  S9n NÌf = f)zï
Gets a subclip from a list of videos.

Args:
    idx (int): index of the subclip. Must be between 0 and num_clips().

Returns:
    video (Tensor)
    audio (Tensor)
    info (Dict)
    video_idx (int): index of the video in `video_paths`
zIndex z out of range (z number of clips)r   r§   r\   ÚNHWCÚNCHW)Údimension_orderr   )rƒ   )Ústart_secondsÚstop_seconds)r   r   ri   rl   z x )r¡   Ú
IndexErrorr®   r#   r“   rD   Úitemr   rZ   r3   r4   Úget_frames_atr8   r9   ro   r5   r7   ÚAudioDecoderÚget_samples_played_in_rangeÚ	Exceptionr   Úemptyrµ   rQ   r˜   r�   ÚTensorr,   r6   Úshape)r'   r1   r¬   r­   Ú
video_pathÚclip_ptsÚ	start_idxÚend_idxr   r¼   r:   Úvideor;   Ú	start_secÚend_secÚaudio_decoderÚaudio_samplesÚaudioÚinfoÚresampling_idxs                       r   Úget_clipÚVideoClips.get_clip#  s  € ð —.‘.Ó"Ó"Ü˜v c U¨/¸$¿.¹.Ó:JÐ9KÐK\Ð]Ó^Ð^Ø"×4Ñ4°SÓ9Ñˆ	Ø×%Ñ% iÑ0ˆ
Ø—:‘:˜iÑ(¨Ñ2ˆä˜ ™×(Ñ(Ó*Ó+ˆ	Ü�h˜r‘l×'Ñ'Ó)Ó*ˆä$Ó&ˆ
à$(×$6Ñ$6¸&Ó$@™&ÀfˆØ×%Ñ%×2Ñ2°:Ð2Ð_ˆØ×%Ñ%¬d´5¸ÈaÁKÓ3PÓ.QÐ%ÐR×WÑWˆð ×Ñ×*Ñ*ˆØ‘Oˆ	Ø˜Q‘; #Ñ%ˆð	=Ø&×/Ñ/×<Ñ<¸ZÓHˆMØ)×EÑEÐT]ÐEÐtˆMØ!×&Ñ&ˆEð ˜SÐ!ˆà�?‰?Ñ&Ø!×1Ñ1°)Ñ<¸XÑFˆNÜ˜.¬%¯,©,×7Ñ7Ø!/°.ÀÑ2CÑ!C�Ø˜.Ñ)ˆEØ $§¡ˆD�ÑÜ�5‹z˜TŸ_™_Ó,ÐR°·±°¸SÀÇÁÐ@QÐ.RÓRÐ,à�e˜T 9Ð,Ð,øô ó 	=Ü—K’K ¬e¯m©mÑ<ŠEð	=ús   Ä(6G; Ç;-H+È*H+c                 óŽ  • U R                    Vs/ s H  n[        U5      PM     nnU R                    Vs/ s H!  o3R                  [        R                  5      PM#     nnU(       a&  [        R
                  " U5      nUR                  5       nU R                  R                  5       nX%S'   XES'   US	 US	 US	 SUS'   U$ s  snf s  snf )NÚvideo_pts_sizesrk   r“   r˜   rœ   é   Ú_version)	rk   r,   r¶   r   r·   ÚcatÚnumpyÚ__dict__Úcopy)r'   r�   r×   rI   rk   Úds         r   Ú__getstate__ÚVideoClips.__getstate__V  s¼   € Ø+/¯>ª>Ó:ª> aœ3˜qž6©>ˆÐ:ð
 15·²Ó?²¨1—T‘Tœ%Ÿ+™+Ö&±ˆ	Ð?æÜŸ	š	 )Ó,ˆIð "Ÿ™Ó)ˆIð �M‰M×ÑÓ ˆØ.Ð
ÑØ"ˆ+‰ð ˆgˆJØÐÐ ØÐ Ð!ð ˆˆ*‰Øˆùò3 ;ùò
 @s
   �B=´(CrÞ   c                 ó  • SU;  a  Xl         g [        R                  " US   [        R                  S9n[        R                  " X!S   SS9nUS	 X!S'   Xl         U R                  U R                  U R                  U R                  5        g )NrÙ   rk   ri   r×   r   )r   )	rÜ   r   rs   r·   Úsplitrb   r6   r   rQ   )r'   rÞ   rk   s      r   Ú__setstate__ÚVideoClips.__setstate__r  ss   € à˜QÓØŒMØä—O’O A k¡N¼%¿+¹+ÑFˆ	Ü—K’K 	Ð->Ñ+?ÀQÑGˆ	àÐÐ à"ˆ+‰ØŒà×Ñ˜4Ÿ?™?¨D¯I©I°t·±ÕGr   )rÜ   rY   rX   rU   rW   rV   rT   r“   rœ   rQ   r6   rS   rZ   r˜   r   rl   r#   rk   )re   r   NNr   r   r   r   r   r   r   r\   )r   Nr%   )#r>   r?   r@   rA   rB   r8   rC   rD   r   rF   Údictr   r(   r`   ra   Úpropertyr5   r‡   Ústaticmethodr   rÆ   rE   r   r�   r•   rb   r.   r¤   r¡   r®   rŠ   rÔ   rß   rã   rG   rH   r   r   rM   rM   K   sÃ  † ñð: &(Ø$%Ø&*Ø:>ØØØØ$%Ø$%ØØ Ø#ñ#Tà˜#‘Yð#Tð  #ð#Tð "ð	#Tð
 ˜U‘Oð#Tð  (¨¨S°#¨X©Ñ7ð#Tð ð#Tð ð#Tð ð#Tð "ð#Tð "ð#Tð ð#Tð ð#Tð ð#Tð 
õ#TôJ1ð4/¨D°°c°©Nð /¸tô /ð ð˜$˜s C˜x™.ó ó ðð
˜d 3™ið 
¨Lô 
ð2 àquñØ—<‘<ðØ-0ðØ8;ðØBJÈ5Á/ðØ_gÐhmÑ_nðà	ˆu�|‰|˜U 4¨¡;°·±Ð#<Ñ=Ð=Ñ	>ôó ðñ2@¨ð @°3ð @ÀHÈUÁOð @Ð_cõ @ð. ˜ô  ð%˜Cô %ð)˜3ô )ð
# Sð 
#¨U°3¸°8©_ô 
#ð ð	¨ð 	¸5ð 	È5ð 	ÐUZÐ[`Ðbg×bnÑbnÐ[nÑUoó 	ó ð	ð1-˜Cð 1- E¨%¯,©,¸¿¹ÀdÈ3ÐPSÈ8ÁnÐVYÐ*YÑ$Zô 1-ðf˜d 3¨ 8™nô ð8H˜d 3¨ 8™nð H°÷ Hr   rM   )r   )rª   r‹   r�   Útypingr   r   r   r   r   rn   r   r	   r   rÆ   rD   r   r!   rK   rM   rH   r   r   Ú<module>ré      sƒ   ðÛ Û Û ß 0Ó 0ã å áˆCƒL€ò	ñ:�5—<‘<ð : sð :°#ð :Àð :ÈUÏ\É\õ :÷(,ñ ,ð.�1ð ˜ô ÷uHò uHr   