§
    ù²ÅjÛN  ã                   ó6  — 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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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'dS )é    N)ÚABCÚabstractmethod)Úglob©ÚPath)ÚCallableÚListÚOptionalÚTupleÚUnion)ÚImageé   )Ú
decode_pngÚ	read_fileé   )Ú	_read_pfmÚverify_str_arg)ÚVisionDataset)Ú	KittiFlowÚSintelÚFlyingThings3DÚFlyingChairsÚHD1Kc                   óÞ   ‡ — e Zd ZdZddeeef         dee         ddfˆ fd„Z	dede
j
        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        j        j        fd„Zˆ xZS )ÚFlowDatasetFNÚrootÚ
transformsÚreturnc                 óv   •— t          ¦   «                              |¬¦  «         || _        g | _        g | _        d S )N)r   )ÚsuperÚ__init__r   Ú
_flow_listÚ_image_list)Úselfr   r   Ú	__class__s      €úSC:\Projects\Historical\venv\Lib\site-packages\torchvision/datasets/_optical_flow.pyr!   zFlowDataset.__init__#   s:   ø€ å‰Œ×Ò˜dÐÑ#Ô#Ð#Ø$ˆŒà%'ˆŒØ,.ˆÔÐÐó    Ú	file_namec                 ón   — t          j        |¦  «        }|j        dk    r|                     d¦  «        }|S )NÚRGB)r   ÚopenÚmodeÚconvert)r$   r(   Úimgs      r&   Ú	_read_imgzFlowDataset._read_img+   s4   € ÝŒj˜Ñ#Ô#ˆØŒ8�uÒÐØ—+’+˜eÑ$Ô$ˆCØˆ
r'   c                 ó   — d S ©N© ©r$   r(   s     r&   Ú
_read_flowzFlowDataset._read_flow1   s	   € ð 	ˆr'   Úindexc                 ó€  — |                       | j        |         d         ¦  «        }|                       | j        |         d         ¦  «        }| j        r0|                      | j        |         ¦  «        }| j        r|\  }}nd }nd x}}| j        �|                      ||||¦  «        \  }}}}| j        s|�||||fS |||fS )Nr   r   )r/   r#   r"   r4   Ú_has_builtin_flow_maskr   )r$   r5   Úimg1Úimg2ÚflowÚvalid_flow_masks         r&   Ú__getitem__zFlowDataset.__getitem__6   sÝ   € à�~Š~˜dÔ.¨uÔ5°aÔ8Ñ9Ô9ˆØ�~Š~˜dÔ.¨uÔ5°aÔ8Ñ9Ô9ˆàŒ?ð 	*Ø—?’? 4¤?°5Ô#9Ñ:Ô:ˆDØÔ*ð 'Ø(,Ñ%��o�oà"&��à%)Ð)ˆD�?àŒ?Ð&Ø04·²ÀÀdÈDÐRaÑ0bÔ0bÑ-ˆD�$˜˜oàÔ&ð 	$¨/Ð*Eà˜˜t _Ð4Ð4à˜˜tÐ#Ð#r'   c                 ó*   — t          | j        ¦  «        S r1   )Úlenr#   )r$   s    r&   Ú__len__zFlowDataset.__len__M   s   € Ý�4Ô#Ñ$Ô$Ð$r'   Úvc                 óR   — t           j        j                             | g|z  ¦  «        S r1   )ÚtorchÚutilsÚdataÚConcatDataset)r$   r@   s     r&   Ú__rmul__zFlowDataset.__rmul__P   s!   € ÝŒ{Ô×-Ò-¨t¨f°q©jÑ9Ô9Ð9r'   r1   )Ú__name__Ú
__module__Ú__qualname__r7   r   Ústrr   r
   r   r!   r   r/   r   r4   ÚintÚT1ÚT2r<   r?   rB   rC   rD   rE   rF   Ú__classcell__©r%   s   @r&   r   r      s(  ø€ € € € € ð #Ðð/ð /˜U 3¨ 9Ô-ð /¸8ÀHÔ;Mð /ÐY]ð /ð /ð /ð /ð /ð /ð 3ð ¨5¬;ð ð ð ð ð ð Cð ð ð ñ „^ðð$ ð $¨¨r°2¨v¬ð $ð $ð $ð $ð.%˜ð %ð %ð %ð %ð:˜#ð : %¤+Ô"2Ô"@ð :ð :ð :ð :ð :ð :ð :ð :r'   r   c                   óš   ‡ — e Zd ZdZ	 	 	 ddeeef         de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Ð  `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`.
    ÚtrainÚcleanNr   ÚsplitÚ	pass_namer   r   c                 ó¬  •— 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    r=| xj        t          t          t          ||	z  dz  ¦  «        ¦  «        ¦  «        z  c_        Œ¹Œâd S )N©r   r   rS   ©rQ   Útest©Úvalid_valuesrT   ©rR   ÚfinalÚbothr]   rR   r\   r   Útrainingr:   rQ   ú*.pngr   ú*.flo)r    r!   r   r   ÚosÚlistdirÚsortedr   rJ   Úranger>   r#   r"   )r$   r   rS   rT   r   ÚpassesÚ	flow_rootÚ	split_dirÚ
image_rootÚsceneÚ
image_listÚir%   s               €r&   r!   zSintel.__init__}   s�  ø€ õ 	‰Œ×Ò˜d¨zÐÑ:Ô:Ð:å�u˜gÐ4EÐFÑFÔFÐFÝ�y +Ð<VÐWÑWÔWÐWØ'0°FÒ':Ð':�'˜7Ð#Ð#ÀÀˆå�D‰zŒz˜HÑ$ˆØ˜:Ñ%¨Ñ.ˆ	àð 		Vð 		VˆIØ&+¨wÒ&6Ð&6˜
˜
¸EˆIØ 	Ñ)¨IÑ5ˆJÝœ JÑ/Ô/ð Vð V�Ý#¥D­¨Z¸%Ñ-?À'Ñ-IÑ)JÔ)JÑ$KÔ$KÑLÔL�
Ý�s :™œ°Ñ2Ñ3Ô3ð Mð M�AØÐ$Ô$¨*°Q¬-¸ÀAÈÁEÔ9JÐ)KÐ(LÑLÐ$Ô$Ð$à˜GÒ#Ð#Ø�O”O¥v­dµ3°yÀ5Ñ7HÈ7Ñ7RÑ3SÔ3SÑ.TÔ.TÑ'UÔ'UÑU�O”OøðVð		Vð 		Vr'   r5   c                 óF   •— 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    r<   ©r$   r5   r%   s     €r&   r<   zSintel.__getitem__˜   ó   ø€ õ ‰wŒw×"Ò" 5Ñ)Ô)Ð)r'   r(   c                 ó    — t          |¦  «        S r1   ©Ú	_read_flor3   s     r&   r4   zSintel._read_flow§   ó   € Ý˜Ñ#Ô#Ð#r'   )rQ   rR   N©rG   rH   rI   Ú__doc__r   rJ   r   r
   r   r!   rK   rL   rM   r<   ÚnpÚndarrayr4   rN   rO   s   @r&   r   r   T   sú   ø€ € € € € ð&ð &ðV Ø Ø)-ðVð Và�C˜�IÔðVð ðVð ð	Vð
 ˜XÔ&ðVð 
ðVð Vð Vð Vð Vð Vð6* ð *¨¨r°2¨v¬ð *ð *ð *ð *ð *ð *ð$ Cð $¨B¬Jð $ð $ð $ð $ð $ð $ð $ð $r'   r   c            	       ó®   ‡ — e Zd 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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.
    TrQ   Nr   rS   r   r   c                 óN  •— 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    r6t	          t          t          |dz  dz  ¦  «        ¦  «        ¦  «        | _
        d S d S )NrV   rS   rW   rY   r   ÚingÚimage_2z*_10.pngz*_11.pngzZCould not find the Kitti flow images. Please make sure the directory structure is correct.rQ   Úflow_occ)r    r!   r   r   rc   r   rJ   ÚFileNotFoundErrorÚzipr#   r"   )	r$   r   rS   r   Úimages1Úimages2r8   r9   r%   s	           €r&   r!   zKittiFlow.__init__Á   s=  ø€ Ý‰Œ×Ò˜d¨zÐÑ:Ô:Ð:å�u˜gÐ4EÐFÑFÔFÐFå�D‰zŒz˜KÑ'¨5°5©=Ñ9ˆÝ��c $¨Ñ"2°ZÑ"?Ñ@Ô@ÑAÔAÑBÔBˆÝ��c $¨Ñ"2°ZÑ"?Ñ@Ô@ÑAÔAÑBÔBˆàð 	˜gð 	Ý#Ølñô ð õ ˜g wÑ/Ô/ð 	/ð 	/‰JˆD�$ØÐÔ $¨  Ñ.ÐÔÐà�GÒÐÝ$¥T­#¨d°ZÑ.?À*Ñ.LÑ*MÔ*MÑ%NÔ%NÑOÔOˆDŒOˆOˆOð Ðr'   r5   c                 óF   •— 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"``.
        rn   ro   s     €r&   r<   zKittiFlow.__getitem__Õ   rp   r'   r(   c                 ó    — t          |¦  «        S r1   ©Ú)_read_16bits_png_with_flow_and_valid_maskr3   s     r&   r4   zKittiFlow._read_flowä   ó   € Ý8¸ÑCÔCÐCr'   ©rQ   N)rG   rH   rI   rv   r7   r   rJ   r   r
   r   r!   rK   rL   rM   r<   r   rw   rx   r4   rN   rO   s   @r&   r   r   «   sú   ø€ € € € € ðð ð& "ÐðPð P˜U 3¨ 9Ô-ð P°cð PÐQYÐZbÔQcð PÐosð Pð Pð Pð Pð Pð Pð(* ð *¨¨r°2¨v¬ð *ð *ð *ð *ð *ð *ðD Cð D¨E°"´*¸b¼jÐ2HÔ,Ið Dð Dð Dð Dð Dð Dð Dð 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`.
    rQ   Nr   rS   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         	                    ||z  ¦  «        st          d
¦  «        ‚t          j        t          ||z  ¦  «        t          j        ¬¦  «        }t          t          |¦  «        ¦  «        D ]a}||         }	|dk    r|	dk    s|dk    rE|	dk    r?| xj        ||         gz  c_        | xj        |d|z           |d|z  dz            ggz  c_        Œbd S )NrV   rS   )rQ   ÚvalrY   r   rD   z*.ppmr`   zFlyingChairs_train_val.txtzmThe FlyingChairs_train_val.txt file was not found - please download it from the dataset page (see docstring).)ÚdtyperQ   r   rŠ   r   )r    r!   r   r   rc   r   rJ   ra   ÚpathÚexistsr~   rw   ÚloadtxtÚint32rd   r>   r"   r#   )r$   r   rS   r   ÚimagesÚflowsÚsplit_file_nameÚ
split_listrk   Úsplit_idr%   s             €r&   r!   zFlyingChairs.__init__  sŒ  ø€ Ý‰Œ×Ò˜d¨zÐÑ:Ô:Ð:å�u˜gÐ4DÐEÑEÔEÐEå�D‰zŒz˜NÑ*ˆÝ��S ¨¡°Ñ!8Ñ9Ô9Ñ:Ô:Ñ;Ô;ˆÝ•t�C  v¡°Ñ 7Ñ8Ô8Ñ9Ô9Ñ:Ô:ˆà6ˆåŒw�~Š~˜d _Ñ4Ñ5Ô5ð 	Ý#Øñô ð õ ”Z¥ D¨?Ñ$:Ñ ;Ô ;Å2Ä8ÐLÑLÔLˆ
Ý•s˜5‘z”zÑ"Ô"ð 	Ið 	IˆAØ! !”}ˆHØ˜Ò Ð  X°¢] ]¸Àº¸È8ÐWXÊ=È=Ø�” E¨!¤H :Ñ-�”ØÐ Ô  f¨Q°©U¤m°V¸AÀ¹EÀA¹IÔ5FÐ%GÐ$HÑHÐ Ô øð		Ið 	Ir'   r5   c                 óF   •— 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.
        rn   ro   s     €r&   r<   zFlyingChairs.__getitem__  rp   r'   r(   c                 ó    — t          |¦  «        S r1   rr   r3   s     r&   r4   zFlyingChairs._read_flow(  rt   r'   r‡   ru   rO   s   @r&   r   r   è   sÜ   ø€ € € € € ðð ð2Ið I˜U 3¨ 9Ô-ð I°cð IÐQYÐZbÔQcð IÐosð Ið Ið Ið Ið Ið Ið.* ð *¨¨r°2¨v¬ð *ð *ð *ð *ð *ð *ð$ Cð $¨B¬Jð $ð $ð $ð $ð $ð $ð $ð $r'   r   c                   ó    ‡ — e Zd ZdZ	 	 	 	 ddeeef         dede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  `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`.
    rQ   rR   ÚleftNr   rS   rT   Úcamerar   r   c           
      ó
  •‡‡— t          ¦   «                              ||¬¦  «         t          |dd¬¦  «         |                     ¦   «         }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_        ŒB‰dk    r<| xj        ||dz            ||         ggz  c_        | xj        ||dz            gz  c_        Œ…�Œ�ŒËd S )NrV   rS   rW   rY   rT   r[   Úframes_cleanpassÚframes_finalpassr™   )r˜   Úrightr]   r]   r˜   r�   r   )Úinto_futureÚ	into_pastz*/*c              3   ó<   •K  — | ]}t          |¦  «        ‰z  V — Œd S r1   r   )Ú.0Ú	image_dirr™   s     €r&   ú	<genexpr>z*FlyingThings3D.__init__.<locals>.<genexpr>e  s.   øè è € ÐUÐU¸Y¥ Y¡¤°&Ñ 8ÐUÐUÐUÐUÐUÐUr'   Úoptical_flowc              3   óB   •K  — | ]}t          |¦  «        ‰z  ‰z  V — Œd S r1   r   )r¡   Úflow_dirr™   Ú	directions     €€r&   r£   z*FlyingThings3D.__init__.<locals>.<genexpr>h  s3   øè è € Ð]Ð]Àx�t H™~œ~°	Ñ9¸FÑBÐ]Ð]Ð]Ð]Ð]Ð]r'   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Úproductrc   r   rJ   r~   r   rd   r>   r#   r"   )r$   r   rS   rT   r™   r   re   ÚcamerasÚ
directionsÚ
image_dirsÚ	flow_dirsr¢   r¦   r�   r‘   rk   r§   r%   s       `           @€r&   r!   zFlyingThings3D.__init__I  sï  øøø€ õ 	‰Œ×Ò˜d¨zÐÑ:Ô:Ð:å�u˜gÐ4EÐFÑFÔFÐFØ—’‘”ˆå�y +Ð<VÐWÑWÔWÐWà(Ð)Ø(Ð)Ø'Ð);Ð<ð
ð 
ð ô	ˆõ 	�v˜xÐ6OÐPÑPÔPÐPØ'-°Ò'7Ð'7�6˜7Ð#Ð#¸f¸Xˆå�D‰zŒzÐ,Ñ,ˆà1ˆ
Ý,5Ô,=¸fÀgÈzÑ,ZÔ,Zð 	:ñ 	:Ñ(ˆI�v˜yÝ¥¥S¨°	Ñ)9¸EÑ)AÀEÑ)IÑ%JÔ%JÑ KÔ KÑLÔLˆJÝÐUÐUÐUÐUÈ*ÐUÑUÔUÑUÔUˆJå�t¥C¨¨~Ñ(=ÀÑ(EÈÑ(MÑ$NÔ$NÑOÔOÑPÔPˆIÝÐ]Ð]Ð]Ð]Ð]ÐS\Ð]Ñ]Ô]Ñ]Ô]ˆIàð  Yð Ý'ðKñô ð õ
 (+¨:°yÑ'AÔ'Að 	:ñ 	:Ñ#�	˜8Ý¥¥S¨°WÑ)<Ñ%=Ô%=Ñ >Ô >Ñ?Ô?�Ý�t¥C¨°7Ñ(:Ñ$;Ô$;Ñ<Ô<Ñ=Ô=�Ý�s 5™zœz¨A™~Ñ.Ô.ð :ð :�AØ  MÒ1Ð1ØÐ(Ô(¨f°Q¬i¸ÀÀAÁ¼Ð-GÐ,HÑHÐ(Ô(Ø˜œ¨E°!¬H¨:Ñ5˜œ˜Ø" kÒ1Ð1ØÐ(Ô(¨f°Q¸±U¬m¸VÀA¼YÐ-GÐ,HÑHÐ(Ô(Ø˜œ¨E°!°a±%¬L¨>Ñ9˜œøñ:ñ	:ð	:ð 	:r'   r5   c                 óF   •— t          ¦   «                              |¦  «        S rm   rn   ro   s     €r&   r<   zFlyingThings3D.__getitem__{  rp   r'   r(   c                 ó    — t          |¦  «        S r1   )r   r3   s     r&   r4   zFlyingThings3D._read_flowŠ  rt   r'   )rQ   rR   r˜   Nru   rO   s   @r&   r   r   ,  sû   ø€ € € € € ðð ð> Ø ØØ)-ð0:ð 0:à�C˜�IÔð0:ð ð0:ð ð	0:ð
 ð0:ð ˜XÔ&ð0:ð 
ð0:ð 0:ð 0:ð 0:ð 0:ð 0:ðd* ð *¨¨r°2¨v¬ð *ð *ð *ð *ð *ð *ð$ Cð $¨B¬Jð $ð $ð $ð $ð $ð $ð $ð $r'   r   c            	       ó®   ‡ — e Zd 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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.
    TrQ   Nr   rS   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_
        Œ<ŒÊn�t          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¦  «        ‚d S )NrV   rS   rW   rY   Úhd1krQ   é$   Úhd1k_flow_gtr}   Ú06dz_*.pngÚ
hd1k_inputr|   r   Úhd1k_challengez*10.pngz*11.pngzTCould not find the HD1K images. Please make sure the directory structure is correct.)r    r!   r   r   rd   rc   r   rJ   r>   r"   r#   r   r~   )r$   r   rS   r   Úseq_idxr‘   r�   rk   r€   r�   Úimage1Úimage2r%   s               €r&   r!   zHD1K.__init__¥  s  ø€ Ý‰Œ×Ò˜d¨zÐÑ:Ô:Ð:å�u˜gÐ4EÐFÑFÔFÐFå�D‰zŒz˜FÑ"ˆØ�GÒÐå  ™9œ9ð Eð E�Ý�t¥C¨¨~Ñ(=À
Ñ(JÐPWÐMcÐMcÐMcÐMcÑ(cÑ$dÔ$dÑeÔeÑfÔf�Ý¥¥S¨°Ñ)<¸yÑ)HÈgÐKaÐKaÐKaÐKaÑ)aÑ%bÔ%bÑ cÔ cÑdÔd�Ý�s 5™zœz¨A™~Ñ.Ô.ð Eð E�AØ�O”O¨¨a¬ zÑ1�O”OØÐ$Ô$¨&°¬)°V¸AÀ¹E´]Ð)CÐ(DÑDÐ$Ô$Ð$ðEðEõ �T¥# dÐ-=Ñ&=À	Ñ&IÈIÑ&UÑ"VÔ"VÑWÔWÑXÔXˆGÝ�T¥# dÐ-=Ñ&=À	Ñ&IÈIÑ&UÑ"VÔ"VÑWÔWÑXÔXˆGÝ"% g¨wÑ"7Ô"7ð 7ð 7‘�˜ØÐ Ô  f¨fÐ%5Ð$6Ñ6Ð Ô Ð àÔð 	Ý#Øfñô ð ð	ð 	r'   r(   c                 ó    — t          |¦  «        S r1   r„   r3   s     r&   r4   zHD1K._read_flow¾  r†   r'   r5   c                 óF   •— 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"``.
        rn   ro   s     €r&   r<   zHD1K.__getitem__Á  rp   r'   r‡   )rG   rH   rI   rv   r7   r   rJ   r   r
   r   r!   r   rw   rx   r4   rK   rL   rM   r<   rN   rO   s   @r&   r   r   Ž  së   ø€ € € € € ðð ð( "Ððð ˜U 3¨ 9Ô-ð °cð ÐQYÐZbÔQcð Ðosð ð ð ð ð ð ð2D Cð D¨E°"´*¸b¼jÐ2HÔ,Ið Dð Dð Dð Dð* ð *¨¨r°2¨v¬ð *ð *ð *ð *ð *ð *ð *ð *ð *ð *r'   r   r(   r   c                 óô  — t          | d¦  «        5 }t          j        |dd¬¦  «                             ¦   «         }|dk    rt	          d¦  «        ‚t          t          j        |dd¬¦  «        ¦  «        }t          t          j        |dd¬¦  «        ¦  «        }t          j        |d	d
|z  |z  ¬¦  «        }|                     ||d
¦  «                             d
dd¦  «        cddd¦  «         S # 1 swxY w Y   dS )z#Read .flo file in Middlebury formatÚrbÚcé   )Úcounts   PIEHz)Magic number incorrect. Invalid .flo filez<i4r   z<f4r   r   N)r+   rw   ÚfromfileÚtobytesÚ
ValueErrorrK   ÚreshapeÚ	transpose)r(   ÚfÚmagicÚwÚhrD   s         r&   rs   rs   Ñ  s0  € õ 
ˆi˜Ñ	Ô	ð 8 !Ý”˜A˜s¨!Ð,Ñ,Ô,×4Ò4Ñ6Ô6ˆØ�GÒÐÝÐHÑIÔIÐIå•”˜A˜u¨AÐ.Ñ.Ô.Ñ/Ô/ˆÝ•”˜A˜u¨AÐ.Ñ.Ô.Ñ/Ô/ˆÝŒ{˜1˜e¨1¨q©5°1©9Ð5Ñ5Ô5ˆØ�|Š|˜A˜q !Ñ$Ô$×.Ò.¨q°!°QÑ7Ô7ð8ð 8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8ð 8ð 8s   ‘CC-Ã-C1Ã4C1c                 ó<  — t          t          | ¦  «        ¦  «                             t          j        ¦  «        }|d d…d d …d d …f         |dd d …d d …f         }}|dz
  dz  }|                     ¦   «         }|                     ¦   «         |                     ¦   «         fS )Nr   i €  é@   )r   r   ÚtorB   Úfloat32ÚboolÚnumpy)r(   Úflow_and_validr:   r;   s       r&   r…   r…   â  sš   € å¥	¨)Ñ 4Ô 4Ñ5Ô5×8Ò8½¼ÑGÔG€NØ*¨2¨A¨2¨q¨q¨q°!°!°!¨8Ô4°nÀQÈÈÈÈ1È1È1ÀWÔ6Mˆ/€DØ�5‰L˜BÑ€DØ%×*Ò*Ñ,Ô,€Oð �:Š:‰<Œ<˜×.Ò.Ñ0Ô0Ð0Ð0r'   )(r©   ra   Úabcr   r   r   Úpathlibr   Útypingr   r	   r
   r   r   rÑ   rw   rB   ÚPILr   Úio.imager   r   rC   r   r   Úvisionr   rx   rL   rM   Ú__all__r   r   r   r   r   r   rJ   rs   r…   r2   r'   r&   ú<module>rÚ      s½  ðØ Ð Ð Ð Ø 	€	€	€	Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø !Ð !Ð !Ð !Ð !Ð !à
ˆ5Œ;˜œ X¨b¬jÔ%9¸8ÀBÄJÔ;OÐOÔP€Ø
ˆ5Œ;˜œ X¨b¬jÔ%9Ð9Ô:€ð€ð4:ð 4:ð 4:ð 4:ð 4:�#�}ñ 4:ô 4:ð 4:ðnT$ð T$ð T$ð T$ð T$ˆ[ñ T$ô T$ð T$ðn:Dð :Dð :Dð :Dð :D�ñ :Dô :Dð :DðzA$ð A$ð A$ð A$ð A$�;ñ A$ô A$ð A$ðH_$ð _$ð _$ð _$ð _$�[ñ _$ô _$ð _$ðD@*ð @*ð @*ð @*ð @*ˆ;ñ @*ô @*ð @*ðF8˜ð 8 ¤ð 8ð 8ð 8ð 8ð"1¸ð 1ÀÀrÄzÐSUÔS]ÐG]ÔA^ð 1ð 1ð 1ð 1ð 1ð 1r'   