Ë
    Dêñiæ;  ã                   óÜ   — d dl Z d dlZd dlZd dlmZmZmZmZ d dlZddl	m
Z
  ed«      Zd„ Zddej                  ded	ed
edej                  f
d„Z G d„ d«      Zdedefd„Z G d„ d«      Zy)é    N)ÚAnyÚOptionalÚTypeVarÚUnioné   )ÚtqdmÚTc                  ó@   — 	 dd l } | S # t        $ r t        d«      ‚w xY w)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    úb/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/torchvision/datasets/video_utils.pyÚ_get_torchcodecr      s6   € ð
Ûð Ðøô ò 
ÜðJó
ð 	
ð
ús   ‚ ˆÚtensorÚsizeÚstepÚdilationÚreturnc                 ó(  — | j                  «       dk7  rt        d| j                  «       › �«      ‚| j                  d«      }| j                  «       }||z  ||z  f}|||dz
  z  dz   z
  |z  dz   |f}|d   dk  rd|f}t	        j
                  | ||«      S )a   
    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¨hÑ#6Ð7€JØ˜( d¨Q¡hÑ/°!Ñ3Ñ4¸Ñ=ÀÑAÀ4ÐH€HØ��{�Q‚Ø�t�9ˆÜ×Ñ˜F H¨jÓ9Ð9ó    c                   óX   — e Zd ZdZdee   ddfd„Zdefd„Zdede	ee   e
e   f   fd„Zy)	Ú_VideoTimestampsDatasetzÚ
    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                 ó   — || _         y ©N)r"   )Úselfr"   s     r   Ú__init__z _VideoTimestampsDataset.__init__6   s
   € Ø&ˆÕr   c                 ó,   — t        | j                  «      S r$   ©Úlenr"   ©r%   s    r   Ú__len__z_VideoTimestampsDataset.__len__9   ó   € Ü�4×#Ñ#Ó$Ð$r   Úidxc                 óê   — t        «       }|j                  j                  | j                  |   «      }|j                  j
                  }|j                  j                  }t        t        |«      «      |fS r$   )	r   ÚdecodersÚVideoDecoderr"   ÚmetadataÚ
num_framesÚaverage_fpsÚlistÚrange)r%   r-   r   Údecoderr2   Úfpss         r   Ú__getitem__z#_VideoTimestampsDataset.__getitem__<   sb   € Ü$Ó&ˆ
Ø×%Ñ%×2Ñ2°4×3CÑ3CÀCÑ3HÓIˆØ×%Ñ%×0Ñ0ˆ
Ø×Ñ×*Ñ*ˆÜ”E˜*Ó%Ó&¨Ð+Ð+r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r4   Ústrr&   Úintr+   Útupler   Úfloatr8   © r   r   r!   r!   -   sO   „ ñð' D¨¡Ið '°$ó 'ð%˜ó %ð,˜sð , u¨T°#©Y¸À¹Ð-GÑ'Hô ,r   r!   Úxc                 ó   — | S )zH
    Dummy collate function to be used with _VideoTimestampsDataset
    rA   )rB   s    r   Ú_collate_fnrD   D   s	   € ð €Hr   c                   óŒ  — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 d*dee   dededee   dee	ee
f      ded	ed
ededededededdfd„Zd+d„Zde	ee
f   ddfd„Zede	ee
f   fd„«       Zdee   dd fd„Ze	 d,dej&                  dededee   dee   deej&                  eee   ej&                  f   f   fd„«       Zd,dededee   ddfd„Zdefd„Zdefd„Zdefd „Zd!edeeef   fd"„Zeded#ed$edeeej&                  f   fd%„«       Zd!edeej&                  ej&                  e	ee
f   ef   fd&„Zde	ee
f   fd'„Zd(e	ee
f   ddfd)„Z y)-Ú
VideoClipsaE  
    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                 óF  — || _         || _        || _        || _        |	| _        |
| _        || _        || _        |j                  «       | _	        | j                  dvrt        d|› d�«      ‚|€| j                  «        n| j                  |«       | j                  |||«       y )N)ÚTHWCÚTCHWz5output_format should be either 'THWC' or 'TCHW', got ú.)r"   rK   rL   rM   rN   rO   rP   rQ   ÚupperrR   r   Ú_compute_frame_ptsÚ_init_from_metadataÚcompute_clips)r%   r"   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   s                 r   r&   zVideoClips.__init__f   s³   € ð" 'ˆÔØ&ˆÔð )ˆÔØ*ˆÔØ$8ˆÔ!Ø$8ˆÔ!Ø,ˆÔØ.ˆÔØ*×0Ñ0Ó2ˆÔØ×ÑÐ%5Ñ5ÜÐTÐUbÐTcÐcdÐeÓfÐfà Ð(Ø×#Ñ#Õ%à×$Ñ$Ð%:Ô;Ø×ÑÐ0Ð2FÈ
ÕSr   c           	      ó6  — g | _         g | _        dd l}|j                  j                  j                  t        | j                  «      d| j                  t        ¬«      }t        t        |«      ¬«      5 }|D ]ˆ  }|j                  d«       t        t        |Ž «      \  }}|D �cg c]   } |j                  ||j                   ¬«      ‘Œ" }}| j                   j#                  |«       | j                  j#                  |«       ŒŠ 	 d d d «       y c c}w # 1 sw Y   y xY w)Nr   é   )Ú
batch_sizerK   Ú
collate_fn)Útotalr   ©Údtype)Ú	video_ptsÚ	video_fpsÚtorch.utils.dataÚutilsÚdataÚ
DataLoaderr!   r"   rK   rD   r   r)   Úupdater4   ÚzipÚ	as_tensorÚlongÚextend)r%   r   ÚdlÚpbarÚbatchÚ	batch_ptsÚ	batch_fpsÚptss           r   rX   zVideoClips._compute_frame_pts‹   sû   € ØˆŒØ&(ˆŒó 	 à*/¯+©+×*:Ñ*:×*EÑ*EÜ# D×$4Ñ$4Ó5ØØ×(Ñ(Ü"ð	 +Fó +
ˆô œ˜B›Ô ð 		1 DØò 1�Ø—‘˜A”Ü'+¬C°¨KÓ'8Ñ$�	˜9ð PYÖYÈ˜_˜UŸ_™_¨S¸¿
¹
ÖCÐY�	ÐYØ—‘×%Ñ% iÔ0Ø—‘×%Ñ% iÕ0ñ1÷		1ð 		1ùò Z÷		1ð 		1ús   Á2/DÂ!%D
Ã:DÄ
DÄDr1   c                 óØ   — |d   | _         t        | j                   «      t        |d   «      k(  sJ ‚|d   | _        t        | j                   «      t        |d   «      k(  sJ ‚|d   | _        y )Nr"   rb   rc   )r"   r)   rb   rc   )r%   r1   s     r   rY   zVideoClips._init_from_metadata¥   sm   € Ø# MÑ2ˆÔÜ�4×#Ñ#Ó$¬¨H°[Ñ,AÓ(BÒBÐBÐBØ! +Ñ.ˆŒÜ�4×#Ñ#Ó$¬¨H°[Ñ,AÓ(BÒBÐBÐBØ! +Ñ.ˆ�r   c                 óN   — | j                   | j                  | j                  dœ}|S )N©r"   rb   rc   ru   )r%   Ú	_metadatas     r   r1   zVideoClips.metadata¬   s*   € ð  ×+Ñ+ØŸ™ØŸ™ñ
ˆ	ð
 Ðr   Úindicesc                 óì  — |D �cg c]  }| j                   |   ‘Œ }}|D �cg c]  }| j                  |   ‘Œ }}|D �cg c]  }| j                  |   ‘Œ }}|||dœ} t        | «      || j                  | j
                  | j                  || j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  ¬«      S c c}w c c}w c c}w )Nru   )rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   )r"   rb   rc   Útyper2   r   rI   rK   rL   rM   rN   rO   rP   rQ   rR   )r%   rw   Úir"   rb   rc   r1   s          r   ÚsubsetzVideoClips.subsetµ   së   € Ø4;Ö<¨q�t×'Ñ'¨Ó*Ð<ˆÐ<Ø07Ö8¨1�T—^‘^ AÓ&Ð8ˆ	Ð8Ø07Ö8¨1�T—^‘^ AÓ&Ð8ˆ	Ð8à&Ø"Ø"ñ
ˆð
 Œt�D‹zØØ"&§/¡/Ø!%§¡Ø—‘Ø"*Ø×(Ñ(Ø×*Ñ*Ø×,Ñ,Ø!%×!:Ñ!:Ø!%×!:Ñ!:Ø×.Ñ.Ø ×0Ñ0Ø×,Ñ,ô
ð 	
ùò =ùÚ8ùÚ8s   …C'¡C,½C1rb   r2   r   r7   c                 óp  — |€d}|€|}t        | «      |z  |z  }t        j                  t        t	        j
                  |«      «      ||«      }| |   } t        | ||«      }|j                  «       st        j                  d«       t        |t        «      r|gt        |«      z  }||fS t        |||«      }||fS )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)   rF   Ú_resample_video_idxr>   ÚmathÚfloorr   r   ÚwarningsÚwarnÚ
isinstanceÚslice)	rb   r2   r   r7   rI   Útotal_framesÚ_idxsÚclipsÚidxss	            r   Úcompute_clips_for_videoz"VideoClips.compute_clips_for_videoÎ   sÆ   € ð ˆ;ð ˆCØÐØˆJÜ˜9“~¨
Ñ2°SÑ8ˆÜ×.Ñ.¬s´4·:±:¸lÓ3KÓ/LÈcÐS]Ó^ˆØ˜eÑ$ˆ	Ü�y *¨dÓ3ˆØ�{‰{Œ}Ü�M‰Mð\ôô
 �eœUÔ#Ø�7œS ›ZÑ'ˆDð �dˆ{Ðô ˜% ¨TÓ2ˆDØ�dˆ{Ðr   c                 óô  — || _         || _        || _        g | _        g | _        t        | j                  | j                  «      D ]S  \  }}| j                  |||||«      \  }}| j                  j                  |«       | j                  j                  |«       ŒU t        j                  | j                  D �cg c]  }t        |«      ‘Œ c}«      }	|	j                  d«      j                  «       | _        yc c}w )a„  
        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)r2   r   rI   r†   Úresampling_idxsri   rb   rc   rˆ   Úappendr   rj   r)   ÚcumsumÚtolistÚcumulative_sizes)
r%   r2   r   rI   rb   r7   r†   r‡   ÚvÚclip_lengthss
             r   rZ   zVideoClips.compute_clipsè   sÓ   € ð %ˆŒØˆŒ	Ø$ˆŒØˆŒ
Ø!ˆÔÜ! $§.¡.°$·.±.ÓAò 	.‰NˆI�sØ×6Ñ6°yÀ*ÈdÐTWÐYcÓd‰KˆE�4Ø�J‰J×Ñ˜eÔ$Ø× Ñ ×'Ñ'¨Õ-ð	.ô —‘¸¿
¹
Ö'C°1¬¨A­Ò'CÓDˆØ ,× 3Ñ 3°AÓ 6× =Ñ =Ó ?ˆÕùò (Ds   Â7C5c                 ó"   — | j                  «       S r$   )Ú	num_clipsr*   s    r   r+   zVideoClips.__len__ÿ   s   € Ø�~‰~ÓÐr   c                 ó,   — t        | j                  «      S r$   r(   r*   s    r   Ú
num_videoszVideoClips.num_videos  r,   r   c                 ó    — | j                   d   S )zJ
        Number of subclips that are available in the video list.
        éÿÿÿÿ)rŽ   r*   s    r   r’   zVideoClips.num_clips  s   € ð ×$Ñ$ RÑ(Ð(r   r-   c                 óŠ   — t        j                  | j                  |«      }|dk(  r|}||fS || j                  |dz
     z
  }||fS )zw
        Converts a flattened representation of the indices into a video_idx, clip_idx
        representation.
        r   r   )ÚbisectÚbisect_rightrŽ   )r%   r-   Ú	video_idxÚclip_idxs       r   Úget_clip_locationzVideoClips.get_clip_location  s[   € ô
 ×'Ñ'¨×(=Ñ(=¸sÓCˆ	Ø˜Š>ØˆHð ˜(Ð"Ð"ð ˜T×2Ñ2°9¸q±=ÑAÑAˆHØ˜(Ð"Ð"r   Úoriginal_fpsÚnew_fpsc                 ó
  — ||z  }|j                  «       rt        |«      }t        d d |«      S t        j                  | t        j
                  ¬«      |z  }|j                  «       j                  t        j                  «      }|S )Nr`   )	Ú
is_integerr>   rƒ   r   ÚarangeÚfloat32r   ÚtoÚint64)r2   r�   rž   r   r‡   s        r   r}   zVideoClips._resample_video_idx  sf   € à˜gÑ%ˆØ�?‰?Ôô �t“9ˆDÜ˜˜t TÓ*Ð*Ü�|‰|˜J¬e¯m©mÔ<¸tÑCˆØ�z‰z‹|�‰œuŸ{™{Ó+ˆØˆr   c           	      ój  — || j                  «       k\  r t        d|› d| j                  «       › d�«      ‚| j                  |«      \  }}| j                  |   }| j                  |   |   }t        |d   j                  «       «      }t        |d   j                  «       «      }t        «       }| j                  dk(  rdnd}	|j                  j                  ||	¬	«      }
|
j                  t        t        ||d
z   «      «      ¬«      j                  }|
j                  j                   }||z  }|d
z   |z  }	 |j                  j#                  |«      }|j%                  ||¬«      }|j                  }d|i}| j.                  �H| j0                  |   |   }t3        |t(        j4                  «      r||d   z
  }||   }| j.                  |d<   t7        |«      | j8                  k(  s J |j:                  › d| j8                  › �«       ‚||||fS # t&        $ r( t)        j*                  dt(        j,                  ¬«      }Y ŒÆw xY w)a7  
        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–   rT   ÚNHWCÚNCHW)Údimension_orderr   )rw   )Ústart_secondsÚstop_seconds)r   r   r`   rc   z x )r’   Ú
IndexErrorrœ   r"   r†   r>   Úitemr   rR   r/   r0   Úget_frames_atr4   r5   rf   r1   r3   ÚAudioDecoderÚget_samples_played_in_rangeÚ	Exceptionr   Úemptyr¢   rI   rŠ   r‚   ÚTensorr)   r2   Úshape)r%   r-   rš   r›   Ú
video_pathÚclip_ptsÚ	start_idxÚend_idxr   r¨   r6   Úvideor7   Ú	start_secÚend_secÚaudio_decoderÚaudio_samplesÚaudioÚinfoÚresampling_idxs                       r   Úget_clipzVideoClips.get_clip#  s&  € ð �$—.‘.Ó"Ò"Ü˜v c U¨/¸$¿.¹.Ó:JÐ9KÐK\Ð]Ó^Ð^Ø"×4Ñ4°SÓ9Ñˆ	�8Ø×%Ñ% iÑ0ˆ
Ø—:‘:˜iÑ(¨Ñ2ˆä˜ ™×(Ñ(Ó*Ó+ˆ	Ü�h˜r‘l×'Ñ'Ó)Ó*ˆä$Ó&ˆ
à$(×$6Ñ$6¸&Ò$@™&ÀfˆØ×%Ñ%×2Ñ2°:ÈÐ2Ó_ˆØ×%Ñ%¬d´5¸ÀGÈaÁKÓ3PÓ.QÐ%ÓR×WÑWˆð ×Ñ×*Ñ*ˆØ ‘Oˆ	Ø˜Q‘; #Ñ%ˆð	=Ø&×/Ñ/×<Ñ<¸ZÓHˆMØ)×EÑEÐT]ÐlsÐEÓtˆMØ!×&Ñ&ˆEð ˜SÐ!ˆà�?‰?Ð&Ø!×1Ñ1°)Ñ<¸XÑFˆNÜ˜.¬%¯,©,Ô7Ø!/°.ÀÑ2CÑ!C�Ø˜.Ñ)ˆEØ $§¡ˆD�ÑÜ�5‹z˜TŸ_™_Ò,ÐR°·±°¸SÀÇÁÐ@QÐ.RÓRÐ,à�e˜T 9Ð,Ð,øô ò 	=Ü—K‘K ¬e¯m©mÔ<ŠEð	=ús   Ä1:H È.H2È1H2c                 ó|  — | j                   D �cg c]  }t        |«      ‘Œ }}| j                   D �cg c]!  }|j                  t        j                  «      ‘Œ# }}|r%t        j
                  |«      }|j                  «       }| j                  j                  «       }||d<   ||d<   |d= |d= |d= d|d<   |S c c}w c c}w )NÚvideo_pts_sizesrb   r†   rŠ   rŽ   é   Ú_version)	rb   r)   r£   r   r¤   ÚcatÚnumpyÚ__dict__Úcopy)r%   r�   rÂ   rB   rb   Úds         r   Ú__getstate__zVideoClips.__getstate__V  sÀ   € Ø+/¯>©>Ö: aœ3˜q�6Ð:ˆÐ:ð
 15·±Ö?¨1�Q—T‘Tœ%Ÿ+™+Õ&Ð?ˆ	Ð?áÜŸ	™	 )Ó,ˆIð "Ÿ™Ó)ˆIð �M‰M×ÑÓ ˆØ.ˆÐ
ÑØ"ˆˆ+‰ð ˆgˆJØÐÐ ØÐ Ð!ð ˆˆ*‰Øˆùò3 ;ùò
 @s
   �B4±&B9rÉ   c                 ó"  — d|vr|| _         y t        j                  |d   t        j                  ¬«      }t        j                  ||d   d¬«      }|d= ||d<   || _         | j                  | j                  | j                  | j                  «       y )NrÄ   rb   r`   rÂ   r   )r   )	rÇ   r   rj   r¤   ÚsplitrZ   r2   r   rI   )r%   rÉ   rb   s      r   Ú__setstate__zVideoClips.__setstate__r  s{   € à˜QÑØˆDŒMØä—O‘O A k¡N¼%¿+¹+ÔFˆ	Ü—K‘K 	¨1Ð->Ñ+?ÀQÔGˆ	àÐÐ à"ˆˆ+‰ØˆŒà×Ñ˜4Ÿ?™?¨D¯I©I°t·±ÕGr   )r\   r   NNr   r   r   r   r   r   r   rT   )r   Nr$   )!r9   r:   r;   r<   r4   r=   r>   r   r@   Údictr   r&   rX   rY   Úpropertyr1   r{   Ústaticmethodr   r²   r?   r   rƒ   rˆ   rZ   r+   r”   r’   rœ   r}   rÀ   rÊ   rÍ   rA   r   r   rF   rF   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   rF   )r   )r˜   r~   r€   Útypingr   r   r   r   r   re   r   r	   r   r²   r>   r   r!   rD   rF   rA   r   r   ú<module>rÒ      sƒ   ðÛ Û Û ß 0Ó 0ã å áˆCƒL€ò	ñ:�5—<‘<ð : sð :°#ð :Àð :ÈUÏ\É\ó :÷(,ñ ,ð.�1ð ˜ó ÷uHò uHr   