Ë
    [²jÔR  ã                   óX  — d dl Z d dlZd dlmZmZ d dlmZ d dlmZ d dl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mZ d	d
lmZ d	dlmZmZ d	dlmZ eej"                  ej"                  eej:                     eej:                     f   Zeej"                  ej"                  eej:                     f   ZdZ  G d„ dee«      Z! G d„ de!«      Z" G d„ de!«      Z# G d„ de!«      Z$ G d„ de!«      Z% G d„ de!«      Z&de'dej:                  fd„Z(de'deej:                  ej:                  f   fd„Z)y)é    N)ÚABCÚabstractmethod)Úglob©ÚPath)ÚAnyÚCallableÚOptionalÚUnion)ÚImageé   )Ú
decode_pngÚ	read_fileé   )Údefault_loader)Ú	_read_pfmÚverify_str_arg)ÚVisionDataset)Ú	KittiFlowÚSintelÚFlyingThings3DÚFlyingChairsÚHD1Kc            	       ó   ‡ — e Zd ZdZdefdeeef   dee	   de	ege
f   ddfˆ fd„Zdedeej                  ej                  f   fd	„Zedefd
„«       Zdedeeef   fd„Zdefd„Zdedej.                  j0                  j2                  fd„Zˆ xZS )ÚFlowDatasetFNÚrootÚ
transformsÚloaderÚreturnc                 ó^   •— t         ‰| �  |¬«       || _        g | _        g | _        || _        y )N)r   )ÚsuperÚ__init__r   Ú
_flow_listÚ_image_listÚ_loader)Úselfr   r   r   Ú	__class__s       €úa/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torchvision/datasets/_optical_flow.pyr"   zFlowDataset.__init__$   s2   ø€ ô 	‰Ñ˜dÐÔ#Ø$ˆŒà%'ˆŒØ,.ˆÔØˆ�ó    Ú	file_namec                 ó$   — | j                  |«      S ©N)r%   ©r&   r*   s     r(   Ú	_read_imgzFlowDataset._read_img2   s   € Ø�|‰|˜IÓ&Ð&r)   c                  ó   — y r,   © r-   s     r(   Ú
_read_flowzFlowDataset._read_flow5   s   € ð 	r)   Úindexc                 óˆ  — | j                  | j                  |   d   «      }| j                  | j                  |   d   «      }| j                  r3| j                  | j                  |   «      }| j                  r|\  }}nd }nd x}}| j
                  �| j                  ||||«      \  }}}}| j                  s|�||||fS |||fS )Nr   r   )r.   r$   r#   r1   Ú_has_builtin_flow_maskr   )r&   r2   Úimg1Úimg2ÚflowÚvalid_flow_masks         r(   Ú__getitem__zFlowDataset.__getitem__:   sÐ   € à�~‰~˜d×.Ñ.¨uÑ5°aÑ8Ó9ˆØ�~‰~˜d×.Ñ.¨uÑ5°aÑ8Ó9ˆà�?Š?Ø—?‘? 4§?¡?°5Ñ#9Ó:ˆDØ×*Ò*Ø(,Ñ%�‘oà"&‘à%)Ð)ˆD�?à�?‰?Ð&Ø04·±ÀÀdÈDÐRaÓ0bÑ-ˆD�$˜˜oà×&Ò&¨/Ð*Eà˜˜t _Ð4Ð4à˜˜tÐ#Ð#r)   c                 ó,   — t        | j                  «      S r,   )Úlenr$   )r&   s    r(   Ú__len__zFlowDataset.__len__Q   s   € Ü�4×#Ñ#Ó$Ð$r)   Úvc                 ó\   — t         j                  j                  j                  | g|z  «      S r,   )ÚtorchÚutilsÚdataÚConcatDataset)r&   r=   s     r(   Ú__rmul__zFlowDataset.__rmul__T   s#   € Ü�{‰{×Ñ×-Ñ-¨t¨f°q©jÓ9Ð9r)   )Ú__name__Ú
__module__Ú__qualname__r4   r   r   Ústrr   r
   r	   r   r"   r   r?   ÚTensorr.   r   r1   ÚintÚT1ÚT2r9   r<   r@   rA   rB   rC   Ú__classcell__©r'   s   @r(   r   r      sá   ø„ ð #Ðð
 *.Ø'5ñ	à�C˜�IÑðð ˜XÑ&ðð ˜#˜ ˜Ñ$ð	ð
 
õð' 3ð '¨5°·±¸e¿l¹lÐ1JÑ+Kó 'ð ð Cò ó ðð$ ð $¨¨r°2¨v©ó $ð.%˜ó %ð:˜#ð : %§+¡+×"2Ñ"2×"@Ñ"@÷ :r)   r   c                   ó¤   ‡ — e Zd ZdZdddefdeeef   dededee	   d	e	ege
f   d
dfˆ fd„Zded
eeef   fˆ fd„Zded
ej"                  fd„Zˆ xZS )r   aÒ  `Sintel <http://sintel.is.tue.mpg.de/>`_ Dataset for optical flow.

    The dataset is expected to have the following structure: ::

        root
            Sintel
                testing
                    clean
                        scene_1
                        scene_2
                        ...
                    final
                        scene_1
                        scene_2
                        ...
                training
                    clean
                        scene_1
                        scene_2
                        ...
                    final
                        scene_1
                        scene_2
                        ...
                    flow
                        scene_1
                        scene_2
                        ...

    Args:
        root (str or ``pathlib.Path``): Root directory of the Sintel Dataset.
        split (string, optional): The dataset split, either "train" (default) or "test"
        pass_name (string, optional): The pass to use, either "clean" (default), "final", or "both". See link above for
            details on the different passes.
        transforms (callable, optional): A function/transform that takes in
            ``img1, img2, flow, valid_flow_mask`` and returns a transformed version.
            ``valid_flow_mask`` is expected for consistency with other datasets which
            return a built-in valid mask, such as :class:`~torchvision.datasets.KittiFlow`.
        loader (callable, optional): A function to load an image given its path.
            By default, it uses PIL as its image loader, but users could also pass in
            ``torchvision.io.decode_image`` for decoding image data into tensors directly.
    ÚtrainÚcleanNr   ÚsplitÚ	pass_namer   r   r   c                 óB  •— t         ‰| �  |||¬«       t        |dd¬«       t        |dd¬«       |dk(  rdd	gn|g}t        |«      d
z  }|dz  dz  }|D ]É  }|dk(  rdn|}||z  |z  }	t	        j
                  |	«      D ]ž  }
t        t        t        |	|
z  dz  «      «      «      }t        t        |«      dz
  «      D ]#  }| xj                  ||   ||dz      ggz  c_        Œ% |dk(  sŒi| xj                  t        t        t        ||
z  dz  «      «      «      z  c_        Œ  ŒË y )N©r   r   r   rQ   ©rO   Útest©Úvalid_valuesrR   ©rP   ÚfinalÚbothr[   rP   rZ   r   Útrainingr7   rO   ú*.pngr   ú*.flo)r!   r"   r   r   ÚosÚlistdirÚsortedr   rG   Úranger;   r$   r#   )r&   r   rQ   rR   r   r   ÚpassesÚ	flow_rootÚ	split_dirÚ
image_rootÚsceneÚ
image_listÚir'   s                €r(   r"   zSintel.__init__„   sA  ø€ ô 	‰Ñ˜d¨zÀ&ÐÔIä�u˜gÐ4EÕFÜ�y +Ð<VÕWØ'0°FÒ':�'˜7Ñ#ÀÀˆä�D‹z˜HÑ$ˆØ˜:Ñ%¨Ñ.ˆ	àò 		VˆIØ&+¨wÒ&6™
¸EˆIØ 	Ñ)¨IÑ5ˆJÜŸ™ JÓ/ò V�Ü#¤D¬¨Z¸%Ñ-?À'Ñ-IÓ)JÓ$KÓL�
Üœs :›°Ñ2Ó3ò M�AØ×$Ò$¨*°Q©-¸ÀAÈÁEÑ9JÐ)KÐ(LÑLÖ$ðMð ˜GÓ#Ø—O’O¤v¬d´3°yÀ5Ñ7HÈ7Ñ7RÓ3SÓ.TÓ'UÑU–OñVñ		Vr)   r2   c                 ó"   •— t         ‰| �  |«      S ©aì  Return example at given index.

        Args:
            index(int): The index of the example to retrieve

        Returns:
            tuple: A 3-tuple with ``(img1, img2, flow)``.
            The flow is a numpy array of shape (2, H, W) and the images are PIL images.
            ``flow`` is None if ``split="test"``.
            If a valid flow mask is generated within the ``transforms`` parameter,
            a 4-tuple with ``(img1, img2, flow, valid_flow_mask)`` is returned.
        ©r!   r9   ©r&   r2   r'   s     €r(   r9   zSintel.__getitem__    ó   ø€ ô ‰wÑ" 5Ó)Ð)r)   r*   c                 ó   — t        |«      S r,   ©Ú	_read_flor-   s     r(   r1   zSintel._read_flow¯   ó   € Ü˜Ó#Ð#r)   ©rD   rE   rF   Ú__doc__r   r   rG   r   r
   r	   r   r"   rI   rJ   rK   r9   ÚnpÚndarrayr1   rL   rM   s   @r(   r   r   X   s¨   ø„ ñ)ð\ Ø Ø)-Ø'5ñVà�C˜�IÑðVð ðVð ð	Vð
 ˜XÑ&ðVð ˜#˜ ˜Ñ$ðVð 
õVð8* ð *¨¨r°2¨v©õ *ð$ Cð $¨B¯J©J÷ $r)   r   c                   óÀ   ‡ — e Zd ZdZdZddefdeeef   dede	e
   de
egef   d	df
ˆ fd
„Zded	eeef   fˆ fd„Zded	eej&                  ej&                  f   fd„Zˆ xZS )r   a»  `KITTI <http://www.cvlibs.net/datasets/kitti/eval_scene_flow.php?benchmark=flow>`__ dataset for optical flow (2015).

    The dataset is expected to have the following structure: ::

        root
            KittiFlow
                testing
                    image_2
                training
                    image_2
                    flow_occ

    Args:
        root (str or ``pathlib.Path``): Root directory of the KittiFlow Dataset.
        split (string, optional): The dataset split, either "train" (default) or "test"
        transforms (callable, optional): A function/transform that takes in
            ``img1, img2, flow, valid_flow_mask`` and returns a transformed version.
        loader (callable, optional): A function to load an image given its path.
            By default, it uses PIL as its image loader, but users could also pass in
            ``torchvision.io.decode_image`` for decoding image data into tensors directly.
    TrO   Nr   rQ   r   r   r   c                 óÌ  •— t         ‰	| �  |||¬«       t        |dd¬«       t        |«      dz  |dz   z  }t	        t        t        |dz  dz  «      «      «      }t	        t        t        |dz  d	z  «      «      «      }|r|st        d
«      ‚t        ||«      D ]  \  }}| xj                  ||ggz  c_	        Œ |dk(  r)t	        t        t        |dz  dz  «      «      «      | _
        y y )NrT   rQ   rU   rW   r   ÚingÚimage_2z*_10.pngz*_11.pngzZCould not find the Kitti flow images. Please make sure the directory structure is correct.rO   Úflow_occ)r!   r"   r   r   ra   r   rG   ÚFileNotFoundErrorÚzipr$   r#   )
r&   r   rQ   r   r   Úimages1Úimages2r5   r6   r'   s
            €r(   r"   zKittiFlow.__init__Ì   sð   ø€ ô 	‰Ñ˜d¨zÀ&ÐÔIä�u˜gÐ4EÕFä�D‹z˜KÑ'¨5°5©=Ñ9ˆÜœœc $¨Ñ"2°ZÑ"?Ó@ÓAÓBˆÜœœc $¨Ñ"2°ZÑ"?Ó@ÓAÓBˆá™gÜ#Ølóð ô ˜g wÓ/ò 	/‰JˆD�$Ø×Ò $¨  Ñ.Öð	/ð �GÒÜ$¤T¬#¨d°ZÑ.?À*Ñ.LÓ*MÓ%NÓOˆD�Oð r)   r2   c                 ó"   •— t         ‰| �  |«      S )aô  Return example at given index.

        Args:
            index(int): The index of the example to retrieve

        Returns:
            tuple: A 4-tuple with ``(img1, img2, flow, valid_flow_mask)``
            where ``valid_flow_mask`` is a numpy boolean mask of shape (H, W)
            indicating which flow values are valid. The flow is a numpy array of
            shape (2, H, W) and the images are PIL images. ``flow`` and ``valid_flow_mask`` are None if
            ``split="test"``.
        rl   rm   s     €r(   r9   zKittiFlow.__getitem__æ   rn   r)   r*   c                 ó   — t        |«      S r,   ©Ú)_read_16bits_png_with_flow_and_valid_maskr-   s     r(   r1   zKittiFlow._read_flowõ   ó   € Ü8¸ÓCÐCr)   )rD   rE   rF   rt   r4   r   r   rG   r   r
   r	   r   r"   rI   rJ   rK   r9   Útupleru   rv   r1   rL   rM   s   @r(   r   r   ³   s²   ø„ ñð, "Ðð
 Ø)-Ø'5ñPà�C˜�IÑðPð ðPð ˜XÑ&ð	Pð
 ˜#˜ ˜Ñ$ðPð 
õPð4* ð *¨¨r°2¨v©õ *ðD Cð D¨E°"·*±*¸b¿j¹jÐ2HÑ,I÷ Dr)   r   c            	       óˆ   ‡ — e Zd ZdZddeeef   dedee   ddfˆ fd„Z	de
deeef   fˆ fd	„Zd
edej                  fd„Zˆ xZS )r   a  `FlyingChairs <https://lmb.informatik.uni-freiburg.de/resources/datasets/FlyingChairs.en.html#flyingchairs>`_ Dataset for optical flow.

    You will also need to download the FlyingChairs_train_val.txt file from the dataset page.

    The dataset is expected to have the following structure: ::

        root
            FlyingChairs
                data
                    00001_flow.flo
                    00001_img1.ppm
                    00001_img2.ppm
                    ...
                FlyingChairs_train_val.txt


    Args:
        root (str or ``pathlib.Path``): Root directory of the FlyingChairs Dataset.
        split (string, optional): The dataset split, either "train" (default) or "val"
        transforms (callable, optional): A function/transform that takes in
            ``img1, img2, flow, valid_flow_mask`` and returns a transformed version.
            ``valid_flow_mask`` is expected for consistency with other datasets which
            return a built-in valid mask, such as :class:`~torchvision.datasets.KittiFlow`.
    Nr   rQ   r   r   c                 ó”  •— t         ‰
| �  ||¬«       t        |dd¬«       t        |«      dz  }t	        t        t        |dz  dz  «      «      «      }t	        t        t        |dz  dz  «      «      «      }d	}t        j                  j                  ||z  «      st        d
«      ‚t        j                  t        ||z  «      t        j                  ¬«      }t        t        |«      «      D ]]  }||   }	|dk(  r|	dk(  s|dk(  sŒ|	dk(  sŒ| xj                   ||   gz  c_        | xj"                  |d|z     |d|z  dz      ggz  c_        Œ_ y )N)r   r   rQ   )rO   ÚvalrW   r   rA   z*.ppmr^   zFlyingChairs_train_val.txtzmThe FlyingChairs_train_val.txt file was not found - please download it from the dataset page (see docstring).)ÚdtyperO   r   rˆ   r   )r!   r"   r   r   ra   r   rG   r_   ÚpathÚexistsr|   ru   ÚloadtxtÚint32rb   r;   r#   r$   )r&   r   rQ   r   ÚimagesÚflowsÚsplit_file_nameÚ
split_listri   Úsplit_idr'   s             €r(   r"   zFlyingChairs.__init__  s4  ø€ Ü‰Ñ˜d¨zÐÔ:ä�u˜gÐ4DÕEä�D‹z˜NÑ*ˆÜœœS ¨¡°Ñ!8Ó9Ó:Ó;ˆÜ”tœC  v¡°Ñ 7Ó8Ó9Ó:ˆà6ˆä�w‰w�~‰~˜d _Ñ4Ô5Ü#Øóð ô —Z‘Z¤ D¨?Ñ$:Ó ;Ä2Ç8Á8ÔLˆ
Ü”s˜5“zÓ"ò 	IˆAØ! !‘}ˆHØ˜Ò  X°¢]¸À»È8ÐWXË=Ø—’ E¨!¡H :Ñ-•Ø× Ò  f¨Q°©U¡m°V¸AÀ¹EÀA¹IÑ5FÐ%GÐ$HÑHÖ ñ		Ir)   r2   c                 ó"   •— t         ‰| �  |«      S )aë  Return example at given index.

        Args:
            index(int): The index of the example to retrieve

        Returns:
            tuple: A 3-tuple with ``(img1, img2, flow)``.
            The flow is a numpy array of shape (2, H, W) and the images are PIL images.
            ``flow`` is None if ``split="val"``.
            If a valid flow mask is generated within the ``transforms`` parameter,
            a 4-tuple with ``(img1, img2, flow, valid_flow_mask)`` is returned.
        rl   rm   s     €r(   r9   zFlyingChairs.__getitem__*  rn   r)   r*   c                 ó   — t        |«      S r,   rp   r-   s     r(   r1   zFlyingChairs._read_flow9  rr   r)   )rO   N)rD   rE   rF   rt   r   rG   r   r
   r	   r"   rI   rJ   rK   r9   ru   rv   r1   rL   rM   s   @r(   r   r   ù   sq   ø„ ññ2I˜U 3¨ 9Ñ-ð I°cð IÐQYÐZbÑQcð IÐosõ Ið.* ð *¨¨r°2¨v©õ *ð$ Cð $¨B¯J©J÷ $r)   r   c                   óª   ‡ — e Zd ZdZddddefdeeef   deded	ed
ee	   de	ege
f   ddfˆ fd„Zdedeeef   fˆ fd„Zdedej"                  fd„Zˆ xZS )r   a  `FlyingThings3D <https://lmb.informatik.uni-freiburg.de/resources/datasets/SceneFlowDatasets.en.html>`_ dataset for optical flow.

    The dataset is expected to have the following structure: ::

        root
            FlyingThings3D
                frames_cleanpass
                    TEST
                    TRAIN
                frames_finalpass
                    TEST
                    TRAIN
                optical_flow
                    TEST
                    TRAIN

    Args:
        root (str or ``pathlib.Path``): Root directory of the intel FlyingThings3D Dataset.
        split (string, optional): The dataset split, either "train" (default) or "test"
        pass_name (string, optional): The pass to use, either "clean" (default) or "final" or "both". See link above for
            details on the different passes.
        camera (string, optional): Which camera to return images from. Can be either "left" (default) or "right" or "both".
        transforms (callable, optional): A function/transform that takes in
            ``img1, img2, flow, valid_flow_mask`` and returns a transformed version.
            ``valid_flow_mask`` is expected for consistency with other datasets which
            return a built-in valid mask, such as :class:`~torchvision.datasets.KittiFlow`.
        loader (callable, optional): A function to load an image given its path.
            By default, it uses PIL as its image loader, but users could also pass in
            ``torchvision.io.decode_image`` for decoding image data into tensors directly.
    rO   rP   ÚleftNr   rQ   rR   Úcamerar   r   r   c           
      ó&  •‡‡— t         ‰| �  |||¬«       t        |dd¬«       |j                  «       }t        |dd¬«       dgdgddgdœ|   }t        ‰d	d
¬«       ‰dk(  rddgn‰g}t	        |«      dz  }d}	t        j                  |||	«      D �]~  \  }ŠŠt        t        t        ||z  |z  dz  «      «      «      }
t        ˆfd„|
D «       «      }
t        t        t        |dz  |z  dz  «      «      «      }t        ˆˆfd„|D «       «      }|
r|st        d«      ‚t        |
|«      D ]ä  \  }}t        t        t        |dz  «      «      «      }t        t        t        |dz  «      «      «      }t        t        |«      dz
  «      D ]…  }‰dk(  r;| xj                  ||   ||dz      ggz  c_        | xj                  ||   gz  c_        ŒC‰dk(  sŒI| xj                  ||dz      ||   ggz  c_        | xj                  ||dz      gz  c_        Œ‡ Œæ �Œ� y )NrT   rQ   rU   rW   rR   rY   Úframes_cleanpassÚframes_finalpassr—   )r–   Úrightr[   r[   r–   r›   r   )Úinto_futureÚ	into_pastz*/*c              3   ó:   •K  — | ]  }t        |«      ‰z  –— Œ y ­wr,   r   )Ú.0Ú	image_dirr—   s     €r(   ú	<genexpr>z*FlyingThings3D.__init__.<locals>.<genexpr>z  s   øè ø€ ÒU¸Y¤ Y£°&Õ 8ÑUùs   ƒÚoptical_flowc              3   ó@   •K  — | ]  }t        |«      ‰z  ‰z  –— Œ y ­wr,   r   )rŸ   Úflow_dirr—   Ú	directions     €€r(   r¡   z*FlyingThings3D.__init__.<locals>.<genexpr>}  s   øè ø€ Ò]Àxœt H›~°	Ñ9¸FÕBÑ]ùs   ƒzcCould not find the FlyingThings3D flow images. Please make sure the directory structure is correct.r]   z*.pfmr   rœ   r�   )r!   r"   r   Úupperr   Ú	itertoolsÚproductra   r   rG   r|   r}   rb   r;   r$   r#   )r&   r   rQ   rR   r—   r   r   rc   ÚcamerasÚ
directionsÚ
image_dirsÚ	flow_dirsr    r¤   rŽ   r�   ri   r¥   r'   s       `            @€r(   r"   zFlyingThings3D.__init__]  s1  ú€ ô 	‰Ñ˜d¨zÀ&ÐÔIä�u˜gÐ4EÕFØ—‘“ˆä�y +Ð<VÕWà(Ð)Ø(Ð)Ø'Ð);Ð<ñ
ð ñ	ˆô 	�v˜xÐ6OÕPØ'-°Ò'7�6˜7Ñ#¸f¸Xˆä�D‹zÐ,Ñ,ˆà1ˆ
Ü,5×,=Ñ,=¸fÀgÈzÓ,Zó 	:Ñ(ˆI�v˜yÜ¤¤S¨°	Ñ)9¸EÑ)AÀEÑ)IÓ%JÓ KÓLˆJÜÓUÈ*ÔUÓUˆJäœt¤C¨¨~Ñ(=ÀÑ(EÈÑ(MÓ$NÓOÓPˆIÜÔ]ÐS\Ô]Ó]ˆIá¡YÜ'ðKóð ô
 (+¨:°yÓ'Aò 	:Ñ#�	˜8Ü¤¤S¨°WÑ)<Ó%=Ó >Ó?�Üœt¤C¨°7Ñ(:Ó$;Ó<Ó=�Üœs 5›z¨A™~Ó.ò :�AØ  MÒ1Ø×(Ò(¨f°Q©i¸ÀÀAÁ¹Ð-GÐ,HÑHÕ(ØŸš¨E°!©H¨:Ñ5žØ" kÓ1Ø×(Ò(¨f°Q¸±U©m¸VÀA¹YÐ-GÐ,HÑHÕ(ØŸš¨E°!°a±%©L¨>Ñ9žñ:ò	:ñ	:r)   r2   c                 ó"   •— t         ‰| �  |«      S rk   rl   rm   s     €r(   r9   zFlyingThings3D.__getitem__�  rn   r)   r*   c                 ó   — t        |«      S r,   )r   r-   s     r(   r1   zFlyingThings3D._read_flowŸ  rr   r)   rs   rM   s   @r(   r   r   =  s¯   ø„ ñðD Ø ØØ)-Ø'5ñ1:à�C˜�IÑð1:ð ð1:ð ð	1:ð
 ð1:ð ˜XÑ&ð1:ð ˜#˜ ˜Ñ$ð1:ð 
õ1:ðf* ð *¨¨r°2¨v©õ *ð$ Cð $¨B¯J©J÷ $r)   r   c                   óÀ   ‡ — e Zd ZdZdZddefdeeef   dede	e
   de
egef   d	df
ˆ fd
„Zded	eej                  ej                  f   fd„Zded	eeef   fˆ fd„Zˆ xZS )r   a³  `HD1K <http://hci-benchmark.iwr.uni-heidelberg.de/>`__ dataset for optical flow.

    The dataset is expected to have the following structure: ::

        root
            hd1k
                hd1k_challenge
                    image_2
                hd1k_flow_gt
                    flow_occ
                hd1k_input
                    image_2

    Args:
        root (str or ``pathlib.Path``): Root directory of the HD1K Dataset.
        split (string, optional): The dataset split, either "train" (default) or "test"
        transforms (callable, optional): A function/transform that takes in
            ``img1, img2, flow, valid_flow_mask`` and returns a transformed version.
        loader (callable, optional): A function to load an image given its path.
            By default, it uses PIL as its image loader, but users could also pass in
            ``torchvision.io.decode_image`` for decoding image data into tensors directly.
    TrO   Nr   rQ   r   r   r   c           
      ó   •— t         ‰| �  |||¬«       t        |dd¬«       t        |«      dz  }|dk(  r»t	        d«      D ]¬  }t        t        t        |dz  d	z  |d
›d�z  «      «      «      }t        t        t        |dz  dz  |d
›d�z  «      «      «      }t	        t        |«      dz
  «      D ]<  }| xj                  ||   gz  c_	        | xj                  ||   ||dz      ggz  c_
        Œ> Œ® nxt        t        t        |dz  dz  dz  «      «      «      }	t        t        t        |dz  dz  dz  «      «      «      }
t        |	|
«      D ]  \  }}| xj                  ||ggz  c_
        Œ | j                  st        d«      ‚y )NrT   rQ   rU   rW   Úhd1krO   é$   Úhd1k_flow_gtr{   Ú06dz_*.pngÚ
hd1k_inputrz   r   Úhd1k_challengez*10.pngz*11.pngzTCould not find the HD1K images. Please make sure the directory structure is correct.)r!   r"   r   r   rb   ra   r   rG   r;   r#   r$   r}   r|   )r&   r   rQ   r   r   Úseq_idxr�   rŽ   ri   r~   r   Úimage1Úimage2r'   s                €r(   r"   zHD1K.__init__½  s¢  ø€ ô 	‰Ñ˜d¨zÀ&ÐÔIä�u˜gÐ4EÕFä�D‹z˜FÑ"ˆØ�GÒä  ›9ò E�Üœt¤C¨¨~Ñ(=À
Ñ(JÐPWÐX[È}Ð\bÐMcÑ(cÓ$dÓeÓf�Ü¤¤S¨°Ñ)<¸yÑ)HÈgÐVYÈ]ÐZ`ÐKaÑ)aÓ%bÓ cÓd�Üœs 5›z¨A™~Ó.ò E�AØ—O’O¨¨a© zÑ1•OØ×$Ò$¨&°©)°V¸AÀ¹E±]Ð)CÐ(DÑDÖ$ñEñEô œT¤# dÐ-=Ñ&=À	Ñ&IÈIÑ&UÓ"VÓWÓXˆGÜœT¤# dÐ-=Ñ&=À	Ñ&IÈIÑ&UÓ"VÓWÓXˆGÜ"% g¨wÓ"7ò 7‘�˜Ø× Ò  f¨fÐ%5Ð$6Ñ6Ö ð7ð ×ÒÜ#Øfóð ð  r)   r*   c                 ó   — t        |«      S r,   r‚   r-   s     r(   r1   zHD1K._read_flowÜ  r„   r)   r2   c                 ó"   •— t         ‰| �  |«      S )aô  Return example at given index.

        Args:
            index(int): The index of the example to retrieve

        Returns:
            tuple: A 4-tuple with ``(img1, img2, flow, valid_flow_mask)`` where ``valid_flow_mask``
            is a numpy boolean mask of shape (H, W)
            indicating which flow values are valid. The flow is a numpy array of
            shape (2, H, W) and the images are PIL images. ``flow`` and ``valid_flow_mask`` are None if
            ``split="test"``.
        rl   rm   s     €r(   r9   zHD1K.__getitem__ß  rn   r)   )rD   rE   rF   rt   r4   r   r   rG   r   r
   r	   r   r"   r…   ru   rv   r1   rI   rJ   rK   r9   rL   rM   s   @r(   r   r   £  s±   ø„ ñð. "Ðð
 Ø)-Ø'5ñà�C˜�IÑðð ðð ˜XÑ&ð	ð
 ˜#˜ ˜Ñ$ðð 
õð>D Cð D¨E°"·*±*¸b¿j¹jÐ2HÑ,Ió Dð* ð *¨¨r°2¨v©÷ *ñ *r)   r   r*   r   c                 óÎ  — t        | d«      5 }t        j                  |dd¬«      j                  «       }|dk7  rt	        d«      ‚t        j                  |dd¬«      j                  «       }t        j                  |dd¬«      j                  «       }t        j                  |d	d
|z  |z  ¬«      }|j                  ||d
«      j                  d
dd«      cddd«       S # 1 sw Y   yxY w)z#Read .flo file in Middlebury formatÚrbÚcé   )Úcounts   PIEHz)Magic number incorrect. Invalid .flo filez<i4r   z<f4r   r   N)Úopenru   ÚfromfileÚtobytesÚ
ValueErrorÚitemÚreshapeÚ	transpose)r*   ÚfÚmagicÚwÚhrA   s         r(   rq   rq   ï  sÃ   € ô 
ˆi˜Ó	ð 8 !Ü—‘˜A˜s¨!Ô,×4Ñ4Ó6ˆØ�GÒÜÐHÓIÐIä�K‰K˜˜5¨Ô*×/Ñ/Ó1ˆÜ�K‰K˜˜5¨Ô*×/Ñ/Ó1ˆÜ�{‰{˜1˜e¨1¨q©5°1©9Ô5ˆØ�|‰|˜A˜q !Ó$×.Ñ.¨q°!°QÓ7÷8÷ 8ò 8ús   �CCÃC$c                 ó  — t        t        | «      «      j                  t        j                  «      }|d d…d d …d d …f   |dd d …d d …f   }}|dz
  dz  }|j                  «       }|j                  «       |j                  «       fS )Nr   i €  é@   )r   r   Útor?   Úfloat32ÚboolÚnumpy)r*   Úflow_and_validr7   r8   s       r(   rƒ   rƒ      s{   € ä¤	¨)Ó 4Ó5×8Ñ8¼¿¹ÓG€NØ*¨2¨A¨2ªq²!¨8Ñ4°nÀQÊÊ1ÀWÑ6Mˆ/€DØ�5‰L˜BÑ€DØ%×*Ñ*Ó,€Oð �:‰:‹<˜×.Ñ.Ó0Ð0Ð0r)   )*r§   r_   Úabcr   r   r   Úpathlibr   Útypingr   r	   r
   r   rÑ   ru   r?   ÚPILr   Úio.imager   r   Úfolderr   r@   r   r   Úvisionr   r…   rv   rJ   rK   Ú__all__r   r   r   r   r   r   rG   rq   rƒ   r0   r)   r(   ú<module>rÛ      s   ðÛ Û 	ß #Ý Ý ß 1Ó 1ã Û Ý ç ,Ý "ß ,Ý !à
ˆ5�;‰;˜Ÿ™ X¨b¯j©jÑ%9¸8ÀBÇJÁJÑ;OÐOÑP€Ø
ˆ5�;‰;˜Ÿ™ X¨b¯j©jÑ%9Ð9Ñ:€ð€ô7:�#�}ô 7:ôtX$ˆ[ô X$ôvCD�ô CDôLA$�;ô A$ôHc$�[ô c$ôLI*ˆ;ô I*ðX8˜ð 8 §¡ó 8ð"1¸ð 1ÀÀrÇzÁzÐSU×S]ÑS]ÐG]ÑA^ô 1r)   