§
    ù²ÅjiÄ  ã                   ó”  — d dl Z d dlZd dlZ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mZ d dlZd dlmZ ddlmZmZmZ dd	lmZ eej        ej        eej                 ej        f         Zeej        ej        eej                 f         Zd
Z e j         e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' 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S )"é    N)ÚABCÚabstractmethod)Úglob)ÚPath)ÚCallableÚcastÚListÚOptionalÚTupleÚUnion)ÚImageé   )Ú	_read_pfmÚdownload_and_extract_archiveÚverify_str_arg)ÚVisionDataset© )Úslice_channelsc                   óP  ‡ — e Zd ZdZdZddeeef         dee	         ddfˆ fd„Z
deeef         dej        fd	„Z	 dd
edee         deeeee         f                  fd„Zededeeej                 eej                 f         fd„¦   «         Zdedeeef         fd„Zdefd„Zˆ xZS )ÚStereoMatchingDatasetz+Base interface for Stereo matching datasetsFNÚrootÚ
transformsÚreturnc                 óv   •— t          ¦   «                              |¬¦  «         || _        g | _        g | _        dS )a}  
        Args:
            root(str): Root directory of the dataset.
            transforms(callable, optional): A function/transform that takes in Tuples of
                (images, disparities, valid_masks) and returns a transformed version of each of them.
                images is a Tuple of (``PIL.Image``, ``PIL.Image``)
                disparities is a Tuple of (``np.ndarray``, ``np.ndarray``) with shape (1, H, W)
                valid_masks is a Tuple of (``np.ndarray``, ``np.ndarray``) with shape (H, W)
                In some cases, when a dataset does not provide disparities, the ``disparities`` and
                ``valid_masks`` can be Tuples containing None values.
                For training splits generally the datasets provide a minimal guarantee of
                images: (``PIL.Image``, ``PIL.Image``)
                disparities: (``np.ndarray``, ``None``) with shape (1, H, W)
                Optionally, based on the dataset, it can return a ``mask`` as well:
                valid_masks: (``np.ndarray | None``, ``None``) with shape (H, W)
                For some test splits, the datasets provides outputs that look like:
                imgaes: (``PIL.Image``, ``PIL.Image``)
                disparities: (``None``, ``None``)
                Optionally, based on the dataset, it can return a ``mask`` as well:
                valid_masks: (``None``, ``None``)
        )r   N)ÚsuperÚ__init__r   Ú_imagesÚ_disparities)Úselfr   r   Ú	__class__s      €úVC:\Projects\Historical\venv\Lib\site-packages\torchvision/datasets/_stereo_matching.pyr   zStereoMatchingDataset.__init__   s<   ø€ õ, 	‰Œ×Ò˜dÐÑ#Ô#Ð#Ø$ˆŒàˆŒØˆÔÐÐó    Ú	file_pathc                 ón   — t          j        |¦  «        }|j        dk    r|                     d¦  «        }|S )NÚRGB)r   ÚopenÚmodeÚconvert)r   r#   Úimgs      r!   Ú	_read_imgzStereoMatchingDataset._read_img:   s4   € ÝŒj˜Ñ#Ô#ˆØŒ8�uÒÐØ—+’+˜eÑ$Ô$ˆCØˆ
r"   Úpaths_left_patternÚpaths_right_patternc                 ó,  — t          t          t          |¦  «        ¦  «        ¦  «        }|r*t          t          t          |¦  «        ¦  «        ¦  «        }nt          d„ |D ¦   «         ¦  «        }|st          d|› �¦  «        ‚|st          d|› �¦  «        ‚t	          |¦  «        t	          |¦  «        k    r6t          dt	          |¦  «        › dt	          |¦  «        › d|› d|› d�	¦  «        ‚t          d„ t          ||¦  «        D ¦   «         ¦  «        }|S )	Nc              3   ó   K  — | ]}d V — Œd S ©Nr   ©Ú.0Ú_s     r!   ú	<genexpr>z4StereoMatchingDataset._scan_pairs.<locals>.<genexpr>L   s"   è è € Ð8Ð8¨˜tÐ8Ð8Ð8Ð8Ð8Ð8r"   z0Could not find any files matching the patterns: zFound z left files but z# right files using:
 left pattern: z
right pattern: ú
c              3   ó$   K  — | ]\  }}||fV — Œd S r/   r   )r1   ÚleftÚrights      r!   r3   z4StereoMatchingDataset._scan_pairs.<locals>.<genexpr>[   s*   è è € ÐSÐS¡{ t¨U�d˜E�]ÐSÐSÐSÐSÐSÐSr"   )ÚlistÚsortedr   ÚFileNotFoundErrorÚlenÚ
ValueErrorÚzip)r   r+   r,   Ú
left_pathsÚright_pathsÚpathss         r!   Ú_scan_pairsz!StereoMatchingDataset._scan_pairs@   sL  € õ �&¥Ð&8Ñ!9Ô!9Ñ:Ô:Ñ;Ô;ˆ
ð ð 	9Ý�v¥dÐ+>Ñ&?Ô&?Ñ@Ô@ÑAÔAˆKˆKåÐ8Ð8¨ZÐ8Ñ8Ô8Ñ8Ô8ˆKàð 	mÝ#Ð$kÐWiÐ$kÐ$kÑlÔlÐlàð 	nÝ#Ð$lÐWjÐ$lÐ$lÑmÔmÐmåˆz‰?Œ?�c +Ñ.Ô.Ò.Ð.Ýð:�˜Z™œð :ð :½#¸kÑ:JÔ:Jð :ð :Ø!3ð:ð :à"5ð:ð :ð :ñô ð õ ÐSÐSµc¸*ÀkÑ6RÔ6RÐSÑSÔSÑSÔSˆØˆr"   c                 ó   — d S r/   r   )r   r#   s     r!   Ú_read_disparityz%StereoMatchingDataset._read_disparity^   s	   € ð 	ˆr"   Úindexc                 óR  — |                       | j        |         d         ¦  «        }|                       | j        |         d         ¦  «        }|                      | j        |         d         ¦  «        \  }}|                      | j        |         d         ¦  «        \  }}||f}||f}	||f}
| j        �|                      ||	|
¦  «        \  }}	}
| j        s|
d         �6|d         |d         |	d         t          t          j        |
d         ¦  «        fS |d         |d         |	d         fS )ao  Return example at given index.

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

        Returns:
            tuple: A 3 or 4-tuple with ``(img_left, img_right, disparity, Optional[valid_mask])`` where ``valid_mask``
                can be a numpy boolean mask of shape (H, W) if the dataset provides a file
                indicating which disparity pixels are valid. The disparity is a numpy array of
                shape (1, H, W) and the images are PIL images. ``disparity`` is None for
                datasets on which for ``split="test"`` the authors did not provide annotations.
        r   r   )	r*   r   rC   r   r   Ú_has_built_in_disparity_maskr   ÚnpÚndarray)r   rD   Úimg_leftÚ	img_rightÚdsp_map_leftÚvalid_mask_leftÚdsp_map_rightÚvalid_mask_rightÚimgsÚdsp_mapsÚvalid_maskss              r!   Ú__getitem__z!StereoMatchingDataset.__getitem__c   s0  € ð —>’> $¤,¨uÔ"5°aÔ"8Ñ9Ô9ˆØ—N’N 4¤<°Ô#6°qÔ#9Ñ:Ô:ˆ	à(,×(<Ò(<¸TÔ=NÈuÔ=UÐVWÔ=XÑ(YÔ(YÑ%ˆ�oØ*.×*>Ò*>¸tÔ?PÐQVÔ?WÐXYÔ?ZÑ*[Ô*[Ñ'ˆÐ'à˜)Ð$ˆØ  -Ð0ˆØ&Ð(8Ð9ˆàŒ?Ð&ð
 —’  h°Ñ<Ô<ñ	ØØØð Ô,ð 	1°¸A´Ð0JØ˜”7˜D œG X¨a¤[µ$µr´zÀ;ÈqÄ>Ñ2RÔ2RÐRÐRà˜”7˜D œG X¨a¤[Ð0Ð0r"   c                 ó*   — t          | j        ¦  «        S r/   )r;   r   )r   s    r!   Ú__len__zStereoMatchingDataset.__len__†   s   € Ý�4”<Ñ Ô Ð r"   r/   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rF   r   Ústrr   r
   r   r   r   r*   r	   r   rA   r   rG   rH   rC   ÚintÚT1ÚT2rR   rT   Ú__classcell__©r    s   @r!   r   r      s~  ø€ € € € € Ø5Ð5à#(Ð ðð ˜U 3¨ 9Ô-ð ¸8ÀHÔ;Mð ÐY]ð ð ð ð ð ð ð8 5¨¨d¨Ô#3ð ¸¼ð ð ð ð ð .2ðð àðð & cœ]ðð 
ˆe�C˜ #œÐ&Ô'Ô	(ð	ð ð ð ð< ð¨ð °°xÀÄ
Ô7KÈXÐVXÔV`ÔMaÐ7aÔ1bð ð ð ñ „^ðð!1 ð !1¨¨r°2¨v¬ð !1ð !1ð !1ð !1ðF!˜ð !ð !ð !ð !ð !ð !ð !ð !r"   r   c                   óŒ   ‡ — 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
ej        df         fd„Zd	edefˆ fd
„Zˆ xZS )ÚCarlaStereoaz  
    Carla simulator data linked in the `CREStereo github repo <https://github.com/megvii-research/CREStereo>`_.

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

        root
            carla-highres
                trainingF
                    scene1
                        img0.png
                        img1.png
                        disp0GT.pfm
                        disp1GT.pfm
                        calib.txt
                    scene2
                        img0.png
                        img1.png
                        disp0GT.pfm
                        disp1GT.pfm
                        calib.txt
                    ...

    Args:
        root (str or ``pathlib.Path``): Root directory where `carla-highres` is located.
        transforms (callable, optional): A function/transform that takes in a sample and returns a transformed version.
    Nr   r   r   c                 ó¤  •— t          ¦   «                              ||¦  «         t          |¦  «        dz  }t          |dz  dz  dz  ¦  «        }t          |dz  dz  dz  ¦  «        }|                      ||¦  «        }|| _        t          |dz  dz  dz  ¦  «        }t          |dz  dz  dz  ¦  «        }|                      ||¦  «        }|| _        d S )Nzcarla-highresÚ	trainingFÚ*úim0.pngúim1.pngúdisp0GT.pfmzdisp1GT.pfm©r   r   r   rY   rA   r   r   )
r   r   r   Úleft_image_patternÚright_image_patternrO   Úleft_disparity_patternÚright_disparity_patternÚdisparitiesr    s
            €r!   r   zCarlaStereo.__init__¦   sä   ø€ Ý‰Œ×Ò˜˜zÑ*Ô*Ð*å�D‰zŒz˜OÑ+ˆå  ¨Ñ!3°cÑ!9¸IÑ!EÑFÔFÐÝ! $¨Ñ"4°sÑ":¸YÑ"FÑGÔGÐØ×ÒÐ 2Ð4GÑHÔHˆØˆŒå!$ T¨KÑ%7¸#Ñ%=ÀÑ%MÑ!NÔ!NÐÝ"% d¨[Ñ&8¸3Ñ&>ÀÑ&NÑ"OÔ"OÐØ×&Ò&Ð'=Ð?VÑWÔWˆØ'ˆÔÐÐr"   r#   c                 óT   — t          |¦  «        }t          j        |¦  «        }d }||fS r/   ©Ú_read_pfm_filerG   Úabs©r   r#   Údisparity_mapÚ
valid_masks       r!   rC   zCarlaStereo._read_disparityµ   ó.   € Ý& yÑ1Ô1ˆÝœ˜}Ñ-Ô-ˆØˆ
Ø˜jÐ(Ð(r"   rD   c                 ól   •— t          t          t          ¦   «                              |¦  «        ¦  «        S ©aÕ  Return example at given index.

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

        Returns:
            tuple: A 3-tuple with ``(img_left, img_right, disparity)``.
            The disparity is a numpy array of shape (1, H, W) and the images are PIL images.
            If a ``valid_mask`` is generated within the ``transforms`` parameter,
            a 4-tuple with ``(img_left, img_right, disparity, valid_mask)`` is returned.
        ©r   r[   r   rR   ©r   rD   r    s     €r!   rR   zCarlaStereo.__getitem__»   ó'   ø€ õ •B�™œ×+Ò+¨EÑ2Ô2Ñ3Ô3Ð3r"   r/   ©rU   rV   rW   rX   r   rY   r   r
   r   r   r   rG   rH   rC   rZ   r[   rR   r]   r^   s   @r!   r`   r`   Š   sÊ   ø€ € € € € ðð ð6(ð (˜U 3¨ 9Ô-ð (¸8ÀHÔ;Mð (ÐY]ð (ð (ð (ð (ð (ð (ð)¨ð )°°r´zÀ4Ð7GÔ1Hð )ð )ð )ð )ð4 ð 4¨ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r"   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j                 df         fd„Zdedefˆ fd„Zˆ xZS )ÚKitti2012Stereoa
  
    KITTI dataset from the `2012 stereo evaluation benchmark <http://www.cvlibs.net/datasets/kitti/eval_stereo_flow.php>`_.
    Uses the RGB images for consistency with KITTI 2015.

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

        root
            Kitti2012
                testing
                    colored_0
                        1_10.png
                        2_10.png
                        ...
                    colored_1
                        1_10.png
                        2_10.png
                        ...
                training
                    colored_0
                        1_10.png
                        2_10.png
                        ...
                    colored_1
                        1_10.png
                        2_10.png
                        ...
                    disp_noc
                        1.png
                        2.png
                        ...
                    calib

    Args:
        root (str or ``pathlib.Path``): Root directory where `Kitti2012` is located.
        split (string, optional): The dataset split of scenes, either "train" (default) or "test".
        transforms (callable, optional): A function/transform that takes in a sample and returns a transformed version.
    TÚtrainNr   Úsplitr   r   c                 óà  •— t          ¦   «                              ||¦  «         t          |dd¬¦  «         t          |¦  «        dz  |dz   z  }t	          |dz  dz  ¦  «        }t	          |dz  dz  ¦  «        }|                      ||¦  «        | _        |d	k    r2t	          |d
z  dz  ¦  «        }|                      |d ¦  «        | _        d S t          d„ | j        D ¦   «         ¦  «        | _        d S )Nr~   ©r}   Útest©Úvalid_valuesÚ	Kitti2012ÚingÚ	colored_0z*_10.pngÚ	colored_1r}   Údisp_nocú*.pngc              3   ó   K  — | ]}d V — ŒdS ©©NNNr   r0   s     r!   r3   z+Kitti2012Stereo.__init__.<locals>.<genexpr>  ó"   è è € Ð$HÐ$H°a \Ð$HÐ$HÐ$HÐ$HÐ$HÐ$Hr"   ©	r   r   r   r   rY   rA   r   r   r8   )r   r   r~   r   Úleft_img_patternÚright_img_patternÚdisparity_patternr    s          €r!   r   zKitti2012Stereo.__init__ó   sþ   ø€ Ý‰Œ×Ò˜˜zÑ*Ô*Ð*å�u˜gÐ4EÐFÑFÔFÐFå�D‰zŒz˜KÑ'¨5°5©=Ñ9ˆå˜t kÑ1°JÑ>Ñ?Ô?ÐÝ  {Ñ 2°ZÑ ?Ñ@Ô@ÐØ×'Ò'Ð(8Ð:KÑLÔLˆŒà�GÒÐÝ # D¨:Ñ$5¸Ñ$?Ñ @Ô @ÐØ $× 0Ò 0Ð1BÀDÑ IÔ IˆDÔÐÐå $Ð$HÐ$H¸4¼<Ð$HÑ$HÔ$HÑ HÔ HˆDÔÐÐr"   r#   c                 ó†   — |€dS t          j        t          j        |¦  «        ¦  «        dz  }|d d d …d d …f         }d }||fS ©NrŒ   g      p@©rG   Úasarrayr   r&   rq   s       r!   rC   zKitti2012Stereo._read_disparity  óS   € àÐØ�:åœ
¥5¤:¨iÑ#8Ô#8Ñ9Ô9¸EÑAˆà% d¨A¨A¨A¨q¨q¨q jÔ1ˆØˆ
Ø˜jÐ(Ð(r"   rD   c                 ól   •— t          t          t          ¦   «                              |¦  «        ¦  «        S ©a  Return example at given index.

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

        Returns:
            tuple: A 4-tuple with ``(img_left, img_right, disparity, valid_mask)``.
            The disparity is a numpy array of shape (1, H, W) and the images are PIL images.
            ``valid_mask`` is implicitly ``None`` if the ``transforms`` parameter does not
            generate a valid mask.
            Both ``disparity`` and ``valid_mask`` are ``None`` if the dataset split is test.
        rw   rx   s     €r!   rR   zKitti2012Stereo.__getitem__  ó'   ø€ õ •B�™œ×+Ò+¨EÑ2Ô2Ñ3Ô3Ð3r"   ©r}   N©rU   rV   rW   rX   rF   r   rY   r   r
   r   r   r   rG   rH   rC   rZ   r[   rR   r]   r^   s   @r!   r|   r|   Ê   sì   ø€ € € € € ð$ð $ðL $(Ð ðIð I˜U 3¨ 9Ô-ð I°cð IÐQYÐZbÔQcð IÐosð Ið Ið Ið Ið Ið Ið"	)¨ð 	)°°xÀÄ
Ô7KÈTÐ7QÔ1Rð 	)ð 	)ð 	)ð 	)ð4 ð 4¨ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r"   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j                 df         fd„Zdedefˆ fd„Zˆ xZS )ÚKitti2015StereoaM  
    KITTI dataset from the `2015 stereo evaluation benchmark <http://www.cvlibs.net/datasets/kitti/eval_scene_flow.php>`_.

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

        root
            Kitti2015
                testing
                    image_2
                        img1.png
                        img2.png
                        ...
                    image_3
                        img1.png
                        img2.png
                        ...
                training
                    image_2
                        img1.png
                        img2.png
                        ...
                    image_3
                        img1.png
                        img2.png
                        ...
                    disp_occ_0
                        img1.png
                        img2.png
                        ...
                    disp_occ_1
                        img1.png
                        img2.png
                        ...
                    calib

    Args:
        root (str or ``pathlib.Path``): Root directory where `Kitti2015` is located.
        split (string, optional): The dataset split of scenes, either "train" (default) or "test".
        transforms (callable, optional): A function/transform that takes in a sample and returns a transformed version.
    Tr}   Nr   r~   r   r   c                 ó
  •— t          ¦   «                              ||¦  «         t          |dd¬¦  «         t          |¦  «        dz  |dz   z  }t	          |dz  dz  ¦  «        }t	          |dz  dz  ¦  «        }|                      ||¦  «        | _        |d	k    rGt	          |d
z  dz  ¦  «        }t	          |dz  dz  ¦  «        }|                      ||¦  «        | _        d S t          d„ | j        D ¦   «         ¦  «        | _        d S )Nr~   r€   r‚   Ú	Kitti2015r…   Úimage_2r‰   Úimage_3r}   Ú
disp_occ_0Ú
disp_occ_1c              3   ó   K  — | ]}d V — ŒdS r‹   r   r0   s     r!   r3   z+Kitti2015Stereo.__init__.<locals>.<genexpr>Z  r�   r"   rŽ   ©	r   r   r~   r   r�   r�   rj   rk   r    s	           €r!   r   zKitti2015Stereo.__init__K  s  ø€ Ý‰Œ×Ò˜˜zÑ*Ô*Ð*å�u˜gÐ4EÐFÑFÔFÐFå�D‰zŒz˜KÑ'¨5°5©=Ñ9ˆÝ˜t iÑ/°'Ñ9Ñ:Ô:ÐÝ  yÑ 0°7Ñ :Ñ;Ô;ÐØ×'Ò'Ð(8Ð:KÑLÔLˆŒà�GÒÐÝ%(¨°Ñ)<¸wÑ)FÑ%GÔ%GÐ"Ý&)¨$°Ñ*=ÀÑ*GÑ&HÔ&HÐ#Ø $× 0Ò 0Ð1GÐI`Ñ aÔ aˆDÔÐÐå $Ð$HÐ$H¸4¼<Ð$HÑ$HÔ$HÑ HÔ HˆDÔÐÐr"   r#   c                 ó†   — |€dS t          j        t          j        |¦  «        ¦  «        dz  }|d d d …d d …f         }d }||fS r“   r”   rq   s       r!   rC   zKitti2015Stereo._read_disparity\  r–   r"   rD   c                 ól   •— t          t          t          ¦   «                              |¦  «        ¦  «        S r˜   rw   rx   s     €r!   rR   zKitti2015Stereo.__getitem__g  r™   r"   rš   r›   r^   s   @r!   r�   r�     sì   ø€ € € € € ð'ð 'ðR $(Ð ðIð I˜U 3¨ 9Ô-ð I°cð IÐQYÐZbÔQcð IÐosð Ið Ið Ið Ið Ið Ið"	)¨ð 	)°°xÀÄ
Ô7KÈTÐ7QÔ1Rð 	)ð 	)ð 	)ð 	)ð4 ð 4¨ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r"   r�   c                   óB  ‡ — e Zd ZdZg d¢g d¢g d¢dœZdZ	 	 	 	 	 ddeeef         dede	e         de
de	e         de
dd
fˆ fd„Zdeeef         dej        fˆ fd„Zdedeed         eej        ej        f         f         fd„Zdeeef         dd
fd„Zdedefˆ fd„Zˆ xZS )ÚMiddlebury2014StereoaZ	  Publicly available scenes from the Middlebury dataset `2014 version <https://vision.middlebury.edu/stereo/data/scenes2014/>`.

    The dataset mostly follows the original format, without containing the ambient subdirectories.  : ::

        root
            Middlebury2014
                train
                    scene1-{perfect,imperfect}
                        calib.txt
                        im{0,1}.png
                        im1E.png
                        im1L.png
                        disp{0,1}.pfm
                        disp{0,1}-n.png
                        disp{0,1}-sd.pfm
                        disp{0,1}y.pfm
                    scene2-{perfect,imperfect}
                        calib.txt
                        im{0,1}.png
                        im1E.png
                        im1L.png
                        disp{0,1}.pfm
                        disp{0,1}-n.png
                        disp{0,1}-sd.pfm
                        disp{0,1}y.pfm
                    ...
                additional
                    scene1-{perfect,imperfect}
                        calib.txt
                        im{0,1}.png
                        im1E.png
                        im1L.png
                        disp{0,1}.pfm
                        disp{0,1}-n.png
                        disp{0,1}-sd.pfm
                        disp{0,1}y.pfm
                    ...
                test
                    scene1
                        calib.txt
                        im{0,1}.png
                    scene2
                        calib.txt
                        im{0,1}.png
                    ...

    Args:
        root (str or ``pathlib.Path``): Root directory of the Middleburry 2014 Dataset.
        split (string, optional): The dataset split of scenes, either "train" (default), "test", or "additional"
        use_ambient_views (boolean, optional): Whether to use different expose or lightning views when possible.
            The dataset samples with equal probability between ``[im1.png, im1E.png, im1L.png]``.
        calibration (string, optional): Whether or not to use the calibrated (default) or uncalibrated scenes.
        transforms (callable, optional): A function/transform that takes in a sample and returns a transformed version.
        download (boolean, optional): Whether or not to download the dataset in the ``root`` directory.
    )
Ú
AdirondackÚ	JadeplantÚ
MotorcycleÚPianoÚPipesÚPlayroomÚ	PlaytableÚRecycleÚShelvesÚVintage)ÚBackpackÚBicycle1ÚCableÚ
Classroom1ÚCouchÚFlowersÚMaskÚShopvacÚSticksÚStorageÚSword1ÚSword2ÚUmbrella)ÚPlantsÚClassroom2EÚ
Classroom2Ú	AustraliaÚDjembeLÚCrusadePÚCrusadeÚHoopsÚBicycle2Ú	StaircaseÚNewkubaÚ
AustraliaPÚDjembeÚ
LivingroomÚComputer)r}   Ú
additionalr�   Tr}   ÚperfectFNr   r~   ÚcalibrationÚuse_ambient_viewsr   Údownloadr   c                 óR  •‡— t          ¦   «                              ||¦  «         t          |dd¬¦  «         || _        |r(t          |dd¬¦  «         |dk    rt	          d¦  «        ‚n|dk    rt	          d|› d	|› d
�¦  «        ‚|r|                      |¦  «         t          |¦  «        dz  }t          j         	                    ||z  ¦  «        st          d|› d�¦  «        ‚| j        |         Št          ˆfd„t          j        ||z  ¦  «        D ¦   «         ¦  «        st          d|› d�¦  «        ‚dgdgdgddgdœ|         }|D ]Ù}d|z   }	t          ||z  |	z  dz  ¦  «        }
t          ||z  |	z  dz  ¦  «        }| xj        |                      |
|¦  «        z  c_        |dk    r$t#          d„ | j        D ¦   «         ¦  «        | _        Œ…t          ||z  |	z  dz  ¦  «        }t          ||z  |	z  dz  ¦  «        }| xj        |                      ||¦  «        z  c_        ŒÚ|| _        d S )Nr~   )r}   r�   rÐ   r‚   rÒ   )rÑ   Ú	imperfectÚbothNr�   zMSplit 'test' has only no calibration settings, please set `calibration=None`.zSplit 'zr' has calibration settings, however None was provided as an argument.
Setting calibration to 'perfect' for split 'zF'. Available calibration settings are: 'perfect', 'imperfect', 'both'.ÚMiddlebury2014zThe z7 directory was not found in the provided root directoryc              3   óL   •K  — | ]}‰D ]}|                      |¦  «        V — ŒŒd S r/   )Ú
startswith)r1   ÚsceneÚsÚsplit_sceness      €r!   r3   z0Middlebury2014Stereo.__init__.<locals>.<genexpr>  s^   øè è € ð 
ð 
ð Ø!ð	
ð 
ð ð ×Ò˜QÑÔð
ð 
ð 
ð 
ð 
ð 
ð 
r"   z:Provided root folder does not contain any scenes from the z split.Ú z-perfectz
-imperfect)NrÑ   rÖ   r×   rc   rd   re   c              3   ó   K  — | ]}d V — ŒdS r‹   r   r0   s     r!   r3   z0Middlebury2014Stereo.__init__.<locals>.<genexpr>  s"   è è € Ð(LÐ(L¸!¨Ð(LÐ(LÐ(LÐ(LÐ(LÐ(Lr"   z	disp0.pfmz	disp1.pfm)r   r   r   r~   r<   Ú_download_datasetr   ÚosÚpathÚexistsr:   ÚsplitsÚanyÚlistdirrY   r   rA   r8   r   rÓ   )r   r   r~   rÒ   rÓ   r   rÔ   Úcalibrartion_suffixesÚcalibration_suffixÚscene_patternr�   r�   Úleft_dispartity_patternÚright_dispartity_patternrÝ   r    s                 @€r!   r   zMiddlebury2014Stereo.__init__á  sÙ  øø€ õ 	‰Œ×Ò˜˜zÑ*Ô*Ð*å�u˜gÐ4SÐTÑTÔTÐTØˆŒ
àð 		Ý˜;¨ÐDjÐkÑkÔkÐkØ˜ŠˆÝ Ð!pÑqÔqÐqð ð ˜ŠˆÝ ðS˜eð Sð SØEJðSð Sð Sñô ð ð
 ð 	)Ø×"Ò" 4Ñ(Ô(Ð(å�D‰zŒzÐ,Ñ,ˆåŒw�~Š~˜d U™lÑ+Ô+ð 	kÝ#Ð$i¨5Ð$iÐ$iÐ$iÑjÔjÐjà”{ 5Ô)ˆåð 
ð 
ð 
ð 
õ œ D¨5¡LÑ1Ô1ð
ñ 
ô 
ñ 
ô 
ð 	qõ $Ð$oÐafÐ$oÐ$oÐ$oÑpÔpÐpð �$Ø"�|Ø&˜Ø Ð.ð	!
ð !
ð
 ô!Ðð #8ð 	ið 	iÐØÐ"4Ñ4ˆMÝ" 4¨%¡<°-Ñ#?À)Ñ#KÑLÔLÐÝ # D¨5¡L°=Ñ$@À9Ñ$LÑ MÔ MÐØˆLŒL˜D×,Ò,Ð-=Ð?PÑQÔQÑQˆLŒLà˜ŠˆÝ$(Ð(LÐ(L¸t¼|Ð(LÑ(LÔ(LÑ$LÔ$L�Ô!Ð!å*-¨d°U©l¸]Ñ.JÈ[Ñ.XÑ*YÔ*YÐ'Ý+.¨t°e©|¸mÑ/KÈkÑ/YÑ+ZÔ+ZÐ(ØÐ!Ô! T×%5Ò%5Ð6MÐOgÑ%hÔ%hÑhÐ!Ô!Ð!à!2ˆÔÐÐr"   r#   c                 ó†  •‡— t          |t          ¦  «        st          |¦  «        }|j        dk    rp| j        ri|j        Št          ˆfd„dD ¦   «         ¦  «        }t          t          d„ |¦  «        ¦  «        }|                     |¦  «         t          j	        |¦  «        }t          ¦   «                              |¦  «        S )a  
        Function that reads either the original right image or an augmented view when ``use_ambient_views`` is True.
        When ``use_ambient_views`` is True, the dataset will return at random one of ``[im1.png, im1E.png, im1L.png]``
        as the right image.
        re   c              3   ó"   •K  — | ]	}‰|z  V — Œ
d S r/   r   )r1   Ú	view_nameÚ	base_paths     €r!   r3   z1Middlebury2014Stereo._read_img.<locals>.<genexpr>0  s(   øè è € Ð%fÐ%fÀ	 i°)Ñ&;Ð%fÐ%fÐ%fÐ%fÐ%fÐ%fr"   )zim1E.pngzim1L.pngc                 ó@   — t           j                             | ¦  «        S r/   )rá   râ   rã   )Úps    r!   ú<lambda>z0Middlebury2014Stereo._read_img.<locals>.<lambda>2  s   € µr´w·~²~ÀaÑ7HÔ7H€ r"   )Ú
isinstancer   ÚnamerÓ   Úparentr8   ÚfilterÚappendÚrandomÚchoicer   r*   )r   r#   Úambient_file_pathsrï   r    s      @€r!   r*   zMiddlebury2014Stereo._read_img"  s½   øø€ õ ˜)¥TÑ*Ô*ð 	(Ý˜Y™œˆIàŒ>˜YÒ&Ð&¨4Ô+AÐ&Ø!Ô(ˆIå!%Ð%fÐ%fÐ%fÐ%fÐMeÐ%fÑ%fÔ%fÑ!fÔ!fÐå!%¥fÐ-HÐ-HÐJ\Ñ&]Ô&]Ñ!^Ô!^Ðà×%Ò% iÑ0Ô0Ð0ÝœÐ&8Ñ9Ô9ˆIÝ‰wŒw× Ò  Ñ+Ô+Ð+r"   rŒ   c                 ó°   — |€dS t          |¦  «        }t          j        |¦  «        }d||t          j        k    <   |dk                         d¦  «        }||fS )NrŒ   r   )ro   rG   rp   ÚinfÚsqueezerq   s       r!   rC   z$Middlebury2014Stereo._read_disparity8  s]   € àÐØ�:å& yÑ1Ô1ˆÝœ˜}Ñ-Ô-ˆØ12ˆ�m¥r¤vÒ-Ñ.Ø# aÒ'×0Ò0°Ñ3Ô3ˆ
Ø˜jÐ(Ð(r"   c           	      ó4  ‡— d}t          ‰¦  «        dz  Š| j        }|dk    re| j        |         D ]U}‰|z  }dD ]K}|› d|› �}|› d|› d�}||z                       ¦   «         s#t	          ||› d�t          |¦  «        d¬	¦  «         ŒLŒVd S t          j        ‰dz  ¦  «         t          ˆfd
„| j        d         D ¦   «         ¦  «        rÓd}	t	          |	t          ‰¦  «        d¬¦  «         t          j	        t          ‰dz  ¦  «        ¦  «        D ]g\  }
}}|D ]^}‰dz  }t          |
¦  «        |z  }t          j        |d¬¦  «         t          j        t          |¦  «        t          |¦  «        ¦  «         Œ_Œht          j        t          ‰dz  ¦  «        ¦  «         d S d S )Nz8https://vision.middlebury.edu/stereo/data/scenes2014/ziprØ   r�   )rÑ   rÖ   ú-ú/z.zipT)ÚurlÚfilenameÚdownload_rootÚremove_finishedc              3   óJ   •K  — | ]}|t          j        ‰d z  ¦  «        vV — ŒdS )r�   N)rá   ræ   )r1   rÜ   r   s     €r!   r3   z9Middlebury2014Stereo._download_dataset.<locals>.<genexpr>Y  s6   øè è € ÐSÐS¸!�1�BœJ t¨f¡}Ñ5Ô5Ð5ÐSÐSÐSÐSÐSÐSr"   zEhttps://vision.middlebury.edu/stereo/submit3/zip/MiddEval3-data-F.zip)r  r  r  zMiddEval3/testF)Úexist_okÚ	MiddEval3)r   r~   rä   rã   r   rY   rá   Úmakedirsrå   ÚwalkÚshutilÚmoveÚrmtree)r   r   Úbase_urlÚ
split_nameÚsplit_sceneÚ
split_rootrÒ   Ú
scene_nameÚ	scene_urlÚtest_set_urlÚ	scene_dirÚscene_namesr2   rÛ   Úscene_dst_dirÚscene_src_dirs    `              r!   rà   z&Middlebury2014Stereo._download_datasetC  s  ø€ ØMˆå�D‰zŒzÐ,Ñ,ˆØ”Zˆ
à˜ÒÐØ#œ{¨:Ô6ð ð �Ø! JÑ.�
Ø#;ð 
ð 
�KØ$/Ð!?Ð!?°+Ð!?Ð!?�JØ#+Ð >Ð >¨jÐ >Ð >Ð >�Ià&¨Ñ3×;Ò;Ñ=Ô=ð Ý4Ø )Ø(2Ð%8Ð%8Ð%8Ý*-¨j©/¬/Ø,0ð	ñ ô ð øð
ðð õ ŒK˜˜v™Ñ&Ô&Ð&ÝÐSÐSÐSÐS¸t¼{È6Ô?RÐSÑSÔSÑSÔSð 7àf�õ -°ÍSÐQUÉYÌYÐhlÐmÑmÔmÐmÝ13´½¸TÐDUÑ=UÑ9VÔ9VÑ1WÔ1Wð Lð LÑ-�I˜{¨AØ!,ð Lð L˜Ø(,¨v©˜Ý(,¨Y©¬¸%Ñ(?˜Ýœ M¸DÐAÑAÔAÐAÝœ¥C¨Ñ$6Ô$6½¸MÑ8JÔ8JÑKÔKÐKÐKð	Lõ ”�c $¨Ñ"4Ñ5Ô5Ñ6Ô6Ð6Ð6Ð6ð7ð 7r"   rD   c                 ól   •— t          t          t          ¦   «                              |¦  «        ¦  «        S )az  Return example at given index.

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

        Returns:
            tuple: A 4-tuple with ``(img_left, img_right, disparity, valid_mask)``.
            The disparity is a numpy array of shape (1, H, W) and the images are PIL images.
            ``valid_mask`` is implicitly ``None`` for `split=test`.
        ©r   r\   r   rR   rx   s     €r!   rR   z Middlebury2014Stereo.__getitem__i  ó'   ø€ õ •B�™œ×+Ò+¨EÑ2Ô2Ñ3Ô3Ð3r"   )r}   rÑ   FNF)rU   rV   rW   rX   rä   rF   r   rY   r   r
   Úboolr   r   r   r*   r   rG   rH   rC   rà   rZ   r\   rR   r]   r^   s   @r!   r©   r©   w  sÉ  ø€ € € € € ð6ð 6ðr
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð9-ð -€Fð^ $(Ð ð
 Ø%.Ø"'Ø)-Øð?3ð ?3à�C˜�IÔð?3ð ð?3ð ˜c”]ð	?3ð
  ð?3ð ˜XÔ&ð?3ð ð?3ð 
ð?3ð ?3ð ?3ð ?3ð ?3ð ?3ðB, 5¨¨d¨Ô#3ð ,¸¼ð ,ð ,ð ,ð ,ð ,ð ,ð,	)¨ð 	)°°u¸ZÔ7HÈ%ÐPRÔPZÐ\^Ô\fÐPfÔJgÐ7gÔ1hð 	)ð 	)ð 	)ð 	)ð$7 e¨C°¨IÔ&6ð $7¸4ð $7ð $7ð $7ð $7ðL4 ð 4¨ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r"   r©   c                   ó’   ‡ — e Zd ZdZdZ	 ddeeef         dee	         ddfˆ fd„Z
dedeej        df         fd	„Zd
edefˆ fd„Zˆ xZS )Ú	CREStereoaŒ  Synthetic dataset used in training the `CREStereo <https://arxiv.org/pdf/2203.11483.pdf>`_ architecture.
    Dataset details on the official paper `repo <https://github.com/megvii-research/CREStereo>`_.

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

        root
            CREStereo
                tree
                    img1_left.jpg
                    img1_right.jpg
                    img1_left.disp.jpg
                    img1_right.disp.jpg
                    img2_left.jpg
                    img2_right.jpg
                    img2_left.disp.jpg
                    img2_right.disp.jpg
                    ...
                shapenet
                    img1_left.jpg
                    img1_right.jpg
                    img1_left.disp.jpg
                    img1_right.disp.jpg
                    ...
                reflective
                    img1_left.jpg
                    img1_right.jpg
                    img1_left.disp.jpg
                    img1_right.disp.jpg
                    ...
                hole
                    img1_left.jpg
                    img1_right.jpg
                    img1_left.disp.jpg
                    img1_right.disp.jpg
                    ...

    Args:
        root (str): Root directory of the dataset.
        transforms (callable, optional): A function/transform that takes in a sample and returns a transformed version.
    TNr   r   r   c                 óÂ  •— t          ¦   «                              ||¦  «         t          |¦  «        dz  }g d¢}|D ]¢}t          ||z  dz  ¦  «        }t          ||z  dz  ¦  «        }|                      ||¦  «        }| xj        |z  c_        t          ||z  dz  ¦  «        }t          ||z  dz  ¦  «        }	|                      ||	¦  «        }
| xj        |
z  c_        Œ£d S )Nr  )ÚshapenetÚ
reflectiveÚtreeÚholez
*_left.jpgz*_right.jpgz*_left.disp.pngz*_right.disp.pngrg   )r   r   r   ÚdirsrÜ   rh   ri   rO   rj   rk   rl   r    s              €r!   r   zCREStereo.__init__£  s  ø€ õ
 	‰Œ×Ò˜˜zÑ*Ô*Ð*å�D‰zŒz˜KÑ'ˆà9Ð9Ð9ˆàð 		-ð 		-ˆAÝ!$ T¨A¡X°Ñ%<Ñ!=Ô!=ÐÝ"% d¨Q¡h°Ñ&>Ñ"?Ô"?ÐØ×#Ò#Ð$6Ð8KÑLÔLˆDØˆLŒL˜DÑ ˆLŒLå%(¨°©Ð4EÑ)EÑ%FÔ%FÐ"Ý&)¨$°©(Ð5GÑ*GÑ&HÔ&HÐ#Ø×*Ò*Ð+AÐCZÑ[Ô[ˆKØÐÔ Ñ,ÐÔÐð		-ð 		-r"   r#   c                 ó–   — t          j        t          j        |¦  «        t           j        ¬¦  «        }|d d d …d d …f         dz  }d }||fS )N©Údtypeg      @@©rG   r•   r   r&   Úfloat32rq   s       r!   rC   zCREStereo._read_disparity¹  sO   € Ýœ
¥5¤:¨iÑ#8Ô#8ÅÄ
ÐKÑKÔKˆà% d¨A¨A¨A¨q¨q¨q jÔ1°DÑ8ˆØˆ
Ø˜jÐ(Ð(r"   rD   c                 ól   •— t          t          t          ¦   «                              |¦  «        ¦  «        S )a´  Return example at given index.

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

        Returns:
            tuple: A 4-tuple with ``(img_left, img_right, disparity, valid_mask)``.
            The disparity is a numpy array of shape (1, H, W) and the images are PIL images.
            ``valid_mask`` is implicitly ``None`` if the ``transforms`` parameter does not
            generate a valid mask.
        rw   rx   s     €r!   rR   zCREStereo.__getitem__À  ry   r"   r/   r›   r^   s   @r!   r  r  w  sÞ   ø€ € € € € ð'ð 'ðR $(Ð ð
 *.ð-ð -à�C˜�IÔð-ð ˜XÔ&ð-ð 
ð	-ð -ð -ð -ð -ð -ð,)¨ð )°°r´zÀ4Ð7GÔ1Hð )ð )ð )ð )ð4 ð 4¨ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r"   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j        df         fd
„Zdedefˆ fd„Zˆ xZS )ÚFallingThingsStereoaç  `FallingThings <https://research.nvidia.com/publication/2018-06_falling-things-synthetic-dataset-3d-object-detection-and-pose-estimation>`_ dataset.

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

        root
            FallingThings
                single
                    dir1
                        scene1
                            _object_settings.json
                            _camera_settings.json
                            image1.left.depth.png
                            image1.right.depth.png
                            image1.left.jpg
                            image1.right.jpg
                            image2.left.depth.png
                            image2.right.depth.png
                            image2.left.jpg
                            image2.right
                            ...
                        scene2
                    ...
                mixed
                    scene1
                        _object_settings.json
                        _camera_settings.json
                        image1.left.depth.png
                        image1.right.depth.png
                        image1.left.jpg
                        image1.right.jpg
                        image2.left.depth.png
                        image2.right.depth.png
                        image2.left.jpg
                        image2.right
                        ...
                    scene2
                    ...

    Args:
        root (str or ``pathlib.Path``): Root directory where FallingThings is located.
        variant (string): Which variant to use. Either "single", "mixed", or "both".
        transforms (callable, optional): A function/transform that takes in a sample and returns a transformed version.
    ÚsingleNr   Úvariantr   r   c                 ó‚  •— t          ¦   «                              ||¦  «         t          |¦  «        dz  }t          |dd¬¦  «         dgdgddgdœ|         }t          d¦  «        dz  t          d¦  «        dœ}|D ]Â}t	          ||z  ||         z  d	z  ¦  «        }t	          ||z  ||         z  d
z  ¦  «        }| xj        |                      ||¦  «        z  c_        t	          ||z  ||         z  dz  ¦  «        }	t	          ||z  ||         z  dz  ¦  «        }
| xj        |                      |	|
¦  «        z  c_        ŒÃd S )NÚFallingThingsr-  )r,  Úmixedr×   r‚   r,  r0  rc   )r,  r0  z
*.left.jpgz*.right.jpgz*.left.depth.pngz*.right.depth.png©r   r   r   r   rY   r   rA   r   )r   r   r-  r   ÚvariantsÚsplit_prefixrÜ   r�   r�   rj   rk   r    s              €r!   r   zFallingThingsStereo.__init__ü  s}  ø€ Ý‰Œ×Ò˜˜zÑ*Ô*Ð*å�D‰zŒz˜OÑ+ˆå�w 	Ð8SÐTÑTÔTÐTð  �jØ�YØ˜wÐ'ð
ð 
ð ô	ˆõ ˜3‘i”i #‘oÝ˜#‘Y”Yð
ð 
ˆð
 ð 	cð 	cˆAÝ" 4¨!¡8¨l¸1¬oÑ#=ÀÑ#LÑMÔMÐÝ # D¨1¡H¨|¸A¬Ñ$>ÀÑ$NÑ OÔ OÐØˆLŒL˜D×,Ò,Ð-=Ð?PÑQÔQÑQˆLŒLå%(¨°©°LÀ´OÑ)CÐFXÑ)XÑ%YÔ%YÐ"Ý&)¨$°©(°\À!´_Ñ*DÐGZÑ*ZÑ&[Ô&[Ð#ØÐÔ ×!1Ò!1Ð2HÐJaÑ!bÔ!bÑbÐÔÐð	cð 	cr"   r#   c                 ó°  — t          j        t          j        |¦  «        ¦  «        }t	          |¦  «        j        dz  }t          |d¦  «        5 }t          j        |¦  «        }|d         d         d         d         }d\  }}||z  |z  |                     t           j	        ¦  «        z  }	|	d d d …d d …f         }	d }
|	|
fcd d d ¦  «         S # 1 swxY w Y   d S )Nz_camera_settings.jsonÚrÚcamera_settingsr   Úintrinsic_settingsÚfx)é   éd   )
rG   r•   r   r&   r   rõ   ÚjsonÚloadÚastyper(  )r   r#   ÚdepthÚcamera_settings_pathÚfÚ
intrinsicsÚfocalÚbaselineÚpixel_constantrr   rs   s              r!   rC   z#FallingThingsStereo._read_disparity  s  € å”
�5œ: iÑ0Ô0Ñ1Ô1ˆõ  $ I™œÔ5Ð8OÑOÐÝÐ&¨Ñ,Ô,ð 		-°åœ 1™œˆJØÐ0Ô1°!Ô4Ð5IÔJÈ4ÔPˆEØ'-Ñ$ˆH�nØ%¨Ñ-°Ñ>À%Ç,Â,ÍrÌzÑBZÔBZÑZˆMà)¨$°°°°1°1°1¨*Ô5ˆMØˆJØ  *Ð,ð		-ð 		-ð 		-ð 		-ñ 		-ô 		-ð 		-ð 		-ð 		-ð 		-ð 		-ð 		-øøøð 		-ð 		-ð 		-ð 		-ð 		-ð 		-s   ÁA0CÃCÃCrD   c                 ól   •— t          t          t          ¦   «                              |¦  «        ¦  «        S rv   rw   rx   s     €r!   rR   zFallingThingsStereo.__getitem__(  ry   r"   )r,  Nrz   r^   s   @r!   r+  r+  Ï  sß   ø€ € € € € ð*ð *ðXcð c˜U 3¨ 9Ô-ð c¸ð cÐT\Ð]eÔTfð cÐrvð cð cð cð cð cð cð6-¨ð -°°r´zÀ4Ð7GÔ1Hð -ð -ð -ð -ð"4 ð 4¨ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r"   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j        df         fd„Zded	efˆ fd„Zˆ xZS )ÚSceneFlowStereoaÿ  Dataset interface for `Scene Flow <https://lmb.informatik.uni-freiburg.de/resources/datasets/SceneFlowDatasets.en.html>`_ datasets.
    This interface provides access to the `FlyingThings3D, `Monkaa` and `Driving` datasets.

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

        root
            SceneFlow
                Monkaa
                    frames_cleanpass
                        scene1
                            left
                                img1.png
                                img2.png
                            right
                                img1.png
                                img2.png
                        scene2
                            left
                                img1.png
                                img2.png
                            right
                                img1.png
                                img2.png
                    frames_finalpass
                        scene1
                            left
                                img1.png
                                img2.png
                            right
                                img1.png
                                img2.png
                        ...
                        ...
                    disparity
                        scene1
                            left
                                img1.pfm
                                img2.pfm
                            right
                                img1.pfm
                                img2.pfm
                FlyingThings3D
                    ...
                    ...

    Args:
        root (str or ``pathlib.Path``): Root directory where SceneFlow is located.
        variant (string): Which dataset variant to user, "FlyingThings3D" (default), "Monkaa" or "Driving".
        pass_name (string): Which pass to use, "clean" (default), "final" or "both".
        transforms (callable, optional): A function/transform that takes in a sample and returns a transformed version.

    ÚFlyingThings3DÚcleanNr   r-  Ú	pass_namer   r   c                 óö  •— t          ¦   «                              ||¦  «         t          |¦  «        dz  }t          |dd¬¦  «         t          |dd¬¦  «         dgdgddgdœ|         }||z  }t          d	¦  «        t          d	¦  «        d	z  d	z  t          d	¦  «        d	z  d	z  d
œ}|D ]Î}t	          ||z  ||         z  dz  dz  ¦  «        }t	          ||z  ||         z  dz  dz  ¦  «        }	| xj        |                      ||	¦  «        z  c_        t	          |dz  ||         z  dz  dz  ¦  «        }
t	          |dz  ||         z  dz  dz  ¦  «        }| xj        |                      |
|¦  «        z  c_        ŒÏd S )NÚ	SceneFlowr-  )rH  ÚDrivingÚMonkaar‚   rJ  )rI  Úfinalr×   Úframes_cleanpassÚframes_finalpassrc   )rN  rH  rM  r6   r‰   r7   Ú	disparityz*.pfmr1  )r   r   r-  rJ  r   ÚpassesÚprefix_directoriesrñ   rh   ri   rj   rk   r    s               €r!   r   zSceneFlowStereo.__init__m  sß  ø€ õ 	‰Œ×Ò˜˜zÑ*Ô*Ð*å�D‰zŒz˜KÑ'ˆå�w 	Ð8_Ð`Ñ`Ô`Ð`Ý�y +Ð<VÐWÑWÔWÐWð )Ð)Ø(Ð)Ø'Ð);Ð<ð
ð 
ð ô	ˆð �g‰~ˆõ ˜3‘i”iÝ" 3™iœi¨#™o°Ñ3Ý˜C‘y”y 3‘¨Ñ,ð
ð 
Ðð ð 	cð 	cˆAÝ!$ T¨A¡XÐ0BÀ7Ô0KÑ%KÈfÑ%TÐW^Ñ%^Ñ!_Ô!_ÐÝ"% d¨Q¡hÐ1CÀGÔ1LÑ&LÈwÑ&VÐY`Ñ&`Ñ"aÔ"aÐØˆLŒL˜D×,Ò,Ð-?ÐATÑUÔUÑUˆLŒLå%(¨°Ñ);Ð>PÐQXÔ>YÑ)YÐ\bÑ)bÐelÑ)lÑ%mÔ%mÐ"Ý&)¨$°Ñ*<Ð?QÐRYÔ?ZÑ*ZÐ]dÑ*dÐgnÑ*nÑ&oÔ&oÐ#ØÐÔ ×!1Ò!1Ð2HÐJaÑ!bÔ!bÑbÐÔÐð	cð 	cr"   r#   c                 óT   — t          |¦  «        }t          j        |¦  «        }d }||fS r/   rn   rq   s       r!   rC   zSceneFlowStereo._read_disparity’  rt   r"   rD   c                 ól   •— t          t          t          ¦   «                              |¦  «        ¦  «        S rv   rw   rx   s     €r!   rR   zSceneFlowStereo.__getitem__˜  ry   r"   )rH  rI  Nrz   r^   s   @r!   rG  rG  7  sý   ø€ € € € € ð3ð 3ðp (Ø Ø)-ð#cð #cà�C˜�IÔð#cð ð#cð ð	#cð
 ˜XÔ&ð#cð 
ð#cð #cð #cð #cð #cð #cðJ)¨ð )°°r´zÀ4Ð7GÔ1Hð )ð )ð )ð )ð4 ð 4¨ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r"   rG  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d„Zd
edeed         eej        ej        f         f         fd„Zdedefˆ fd„Zˆ xZS )ÚSintelStereoaÊ  Sintel `Stereo Dataset <http://sintel.is.tue.mpg.de/stereo>`_.

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

        root
            Sintel
                training
                    final_left
                        scene1
                            img1.png
                            img2.png
                            ...
                        ...
                    final_right
                        scene2
                            img1.png
                            img2.png
                            ...
                        ...
                    disparities
                        scene1
                            img1.png
                            img2.png
                            ...
                        ...
                    occlusions
                        scene1
                            img1.png
                            img2.png
                            ...
                        ...
                    outofframe
                        scene1
                            img1.png
                            img2.png
                            ...
                        ...

    Args:
        root (str or ``pathlib.Path``): Root directory where Sintel Stereo is located.
        pass_name (string): The name of the pass to use, either "final", "clean" or "both".
        transforms (callable, optional): A function/transform that takes in a sample and returns a transformed version.
    TrO  Nr   rJ  r   r   c                 óü  •— t          ¦   «                              ||¦  «         t          |dd¬¦  «         t          |¦  «        dz  }dgdgddgdœ|         }|D ]¡}t	          |dz  |› d�z  d	z  d
z  ¦  «        }t	          |dz  |› d�z  d	z  d
z  ¦  «        }| xj        |                      ||¦  «        z  c_        t	          |dz  dz  d	z  d
z  ¦  «        }| xj        |                      |d ¦  «        z  c_        Œ¢d S )NrJ  )rO  rI  r×   r‚   ÚSintelrO  rI  ÚtrainingÚ_leftrc   r‰   Ú_rightrl   )r   r   r   r   rY   r   rA   r   )
r   r   rJ  r   Ú
pass_namesrñ   r�   r�   r‘   r    s
            €r!   r   zSintelStereo.__init__Ö  sF  ø€ Ý‰Œ×Ò˜˜zÑ*Ô*Ð*å�y +Ð<VÐWÑWÔWÐWå�D‰zŒz˜HÑ$ˆà�YØ�YØ˜gÐ&ð
ð 
ð ô	ˆ
ð ð 	Kð 	KˆAÝ" 4¨*Ñ#4¸!°{°{°{Ñ#BÀSÑ#HÈ7Ñ#RÑSÔSÐÝ # D¨:Ñ$5¸1¸¸¸Ñ$DÀsÑ$JÈWÑ$TÑ UÔ UÐØˆLŒL˜D×,Ò,Ð-=Ð?PÑQÔQÑQˆLŒLå # D¨:Ñ$5¸Ñ$EÈÑ$KÈgÑ$UÑ VÔ VÐØÐÔ ×!1Ò!1Ð2CÀTÑ!JÔ!JÑJÐÔÐð	Kð 	Kr"   r#   c                 ó˜  — t          |¦  «        }|j        }|j        }|j        j        }t          |dz  |j        z  |z  ¦  «        }t          |dz  |j        z  |z  ¦  «        }t          j                             |¦  «        st          d|› d�¦  «        ‚t          j                             |¦  «        st          d|› d�¦  «        ‚||fS )NÚ
occlusionsÚ
outofframezOcclusion mask z does not existzOut of frame mask )r   rô   rõ   rY   rá   râ   rã   r:   )r   r#   ÚfpathÚbasenameÚscenedirÚ	sampledirÚocclusion_pathÚoutofframe_paths           r!   Ú_get_occlussion_mask_pathsz'SintelStereo._get_occlussion_mask_pathsê  sÐ   € õ �Y‘”ˆØ”:ˆØ”<ˆà”OÔ*ˆ	å˜Y¨Ñ5¸¼ÑEÈÑPÑQÔQˆÝ˜i¨,Ñ6¸¼ÑFÈÑQÑRÔRˆåŒw�~Š~˜nÑ-Ô-ð 	WÝ#Ð$U°nÐ$UÐ$UÐ$UÑVÔVÐVåŒw�~Š~˜oÑ.Ô.ð 	[Ý#Ð$Y¸Ð$YÐ$YÐ$YÑZÔZÐZà˜Ð.Ð.r"   rŒ   c                 óú  — |€dS t          j        t          j        |¦  «        t           j        ¬¦  «        }t          j        |dd¬¦  «        \  }}}|dz  |dz  z   |dz  z   }t          j        |d	¦  «        }|                      |¦  «        \  }}t          j        t          j        |¦  «        ¦  «        d
k    }t          j        t          j        |¦  «        ¦  «        d
k    }	t          j        |	|¦  «        }||fS )NrŒ   r%  é   éÿÿÿÿ)Úaxisé   é@   i @  )é   r   r   r   )	rG   r•   r   r&   r(  r~   Ú	transposerh  Úlogical_and)
r   r#   rr   r5  ÚgÚbÚocclued_mask_pathÚout_of_frame_mask_pathrs   Úoff_masks
             r!   rC   zSintelStereo._read_disparityÿ  sì   € ØÐØ�:õ œ
¥5¤:¨iÑ#8Ô#8ÅÄ
ÐKÑKÔKˆÝ”(˜=¨!°"Ð5Ñ5Ô5‰ˆˆ1ˆaØ˜A™  T¡
Ñ*¨Q°%©[Ñ8ˆåœ ]°IÑ>Ô>ˆà48×4SÒ4SÐT]Ñ4^Ô4^Ñ1ÐÐ1å”Z¥¤
Ð+<Ñ =Ô =Ñ>Ô>À!ÒCˆ
å”:�eœjÐ)?Ñ@Ô@ÑAÔAÀQÒFˆå”^ H¨jÑ9Ô9ˆ
Ø˜jÐ(Ð(r"   rD   c                 ól   •— t          t          t          ¦   «                              |¦  «        ¦  «        S )a…  Return example at given index.

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

        Returns:
            tuple: A 4-tuple with ``(img_left, img_right, disparity, valid_mask)`` is returned.
            The disparity is a numpy array of shape (1, H, W) and the images are PIL images whilst
            the valid_mask is a numpy array of shape (H, W).
        r  rx   s     €r!   rR   zSintelStereo.__getitem__  r  r"   )rO  N)rU   rV   rW   rX   rF   r   rY   r   r
   r   r   r   rh  rG   rH   rC   rZ   r\   rR   r]   r^   s   @r!   rX  rX  §  s&  ø€ € € € € ð*ð *ðX $(Ð ðKð K˜U 3¨ 9Ô-ð K¸#ð KÐU]Ð^fÔUgð KÐswð Kð Kð Kð Kð Kð Kð(/°Cð /¸EÀ#ÀsÀ(¼Oð /ð /ð /ð /ð*)¨ð )°°u¸ZÔ7HÈ%ÐPRÔPZÐ\^Ô\fÐPfÔJgÐ7gÔ1hð )ð )ð )ð )ð(4 ð 4¨ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r"   rX  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j        df         fd
„Zdedefˆ fd„Zˆ xZS )Ú
InStereo2kaÔ  `InStereo2k <https://github.com/YuhuaXu/StereoDataset>`_ dataset.

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

        root
            InStereo2k
                train
                    scene1
                        left.png
                        right.png
                        left_disp.png
                        right_disp.png
                        ...
                    scene2
                    ...
                test
                    scene1
                        left.png
                        right.png
                        left_disp.png
                        right_disp.png
                        ...
                    scene2
                    ...

    Args:
        root (str or ``pathlib.Path``): Root directory where InStereo2k is located.
        split (string): Either "train" or "test".
        transforms (callable, optional): A function/transform that takes in a sample and returns a transformed version.
    r}   Nr   r~   r   r   c                 ó®  •— t          ¦   «                              ||¦  «         t          |¦  «        dz  |z  }t          |dd¬¦  «         t	          |dz  dz  ¦  «        }t	          |dz  dz  ¦  «        }|                      ||¦  «        | _        t	          |dz  dz  ¦  «        }t	          |dz  d	z  ¦  «        }|                      ||¦  «        | _        d S )
Nry  r~   r€   r‚   rc   zleft.pngz	right.pngzleft_disp.pngzright_disp.png)r   r   r   r   rY   rA   r   r   r¥   s	           €r!   r   zInStereo2k.__init__A  sÞ   ø€ Ý‰Œ×Ò˜˜zÑ*Ô*Ð*å�D‰zŒz˜LÑ(¨5Ñ0ˆå�u˜gÐ4EÐFÑFÔFÐFå˜t c™z¨JÑ6Ñ7Ô7ÐÝ  s¡
¨[Ñ 8Ñ9Ô9ÐØ×'Ò'Ð(8Ð:KÑLÔLˆŒå!$ T¨C¡Z°/Ñ%AÑ!BÔ!BÐÝ"% d¨S¡jÐ3CÑ&CÑ"DÔ"DÐØ ×,Ò,Ð-CÐE\Ñ]Ô]ˆÔÐÐr"   r#   c                 ó–   — t          j        t          j        |¦  «        t           j        ¬¦  «        }|d d d …d d …f         dz  }d }||fS )Nr%  g      �@r'  rq   s       r!   rC   zInStereo2k._read_disparityP  sO   € Ýœ
¥5¤:¨iÑ#8Ô#8ÅÄ
ÐKÑKÔKˆà% d¨A¨A¨A¨q¨q¨q jÔ1°FÑ:ˆØˆ
Ø˜jÐ(Ð(r"   rD   c                 ól   •— t          t          t          ¦   «                              |¦  «        ¦  «        S rv   rw   rx   s     €r!   rR   zInStereo2k.__getitem__W  ry   r"   rš   rz   r^   s   @r!   ry  ry  !  sÞ   ø€ € € € € ðð ð>^ð ^˜U 3¨ 9Ô-ð ^°cð ^ÐQYÐZbÔQcð ^Ðosð ^ð ^ð ^ð ^ð ^ð ^ð)¨ð )°°r´zÀ4Ð7GÔ1Hð )ð )ð )ð )ð4 ð 4¨ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r"   ry  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d         eej        ej        f         f         fd„Zdedefˆ fd„Zˆ xZS )ÚETH3DStereoaf  ETH3D `Low-Res Two-View <https://www.eth3d.net/datasets>`_ dataset.

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

        root
            ETH3D
                two_view_training
                    scene1
                        im1.png
                        im0.png
                        images.txt
                        cameras.txt
                        calib.txt
                    scene2
                        im1.png
                        im0.png
                        images.txt
                        cameras.txt
                        calib.txt
                    ...
                two_view_training_gt
                    scene1
                        disp0GT.pfm
                        mask0nocc.png
                    scene2
                        disp0GT.pfm
                        mask0nocc.png
                    ...
                two_view_testing
                    scene1
                        im1.png
                        im0.png
                        images.txt
                        cameras.txt
                        calib.txt
                    scene2
                        im1.png
                        im0.png
                        images.txt
                        cameras.txt
                        calib.txt
                    ...

    Args:
        root (str or ``pathlib.Path``): Root directory of the ETH3D Dataset.
        split (string, optional): The dataset split of scenes, either "train" (default) or "test".
        transforms (callable, optional): A function/transform that takes in a sample and returns a transformed version.
    Tr}   Nr   r~   r   r   c                 óþ  •— t          ¦   «                              ||¦  «         t          |dd¬¦  «         t          |¦  «        dz  }|dk    rdnd}d}t	          ||z  d	z  d
z  ¦  «        }t	          ||z  d	z  dz  ¦  «        }|                      ||¦  «        | _        |dk    r%t          d„ | j        D ¦   «         ¦  «        | _        d S t	          ||z  d	z  dz  ¦  «        }|                      |d ¦  «        | _        d S )Nr~   r€   r‚   ÚETH3Dr}   Útwo_view_trainingÚtwo_view_testÚtwo_view_training_gtrc   rd   re   r�   c              3   ó   K  — | ]}d V — ŒdS r‹   r   r0   s     r!   r3   z'ETH3DStereo.__init__.<locals>.<genexpr>©  r�   r"   rf   )	r   r   r   r   rY   rA   r   r8   r   )
r   r   r~   r   Úimg_dirÚanot_dirr�   r�   r‘   r    s
            €r!   r   zETH3DStereo.__init__š  s  ø€ Ý‰Œ×Ò˜˜zÑ*Ô*Ð*å�u˜gÐ4EÐFÑFÔFÐFå�D‰zŒz˜GÑ#ˆà).°'Ò)9Ð)9Ð%Ð%¸ˆØ)ˆå˜t g™~°Ñ3°iÑ?Ñ@Ô@ÐÝ  w¡°Ñ 4°yÑ @ÑAÔAÐØ×'Ò'Ð(8Ð:KÑLÔLˆŒà�FŠ?ˆ?Ý $Ð$HÐ$H¸4¼<Ð$HÑ$HÔ$HÑ HÔ HˆDÔÐÐå # D¨8¡O°cÑ$9¸MÑ$IÑ JÔ JÐØ $× 0Ò 0Ð1BÀDÑ IÔ IˆDÔÐÐr"   r#   rŒ   c                 ó  — |€dS t          |¦  «        }t          j        |¦  «        }t          |¦  «        j        dz  }t          j        |¦  «        }t          j        |¦  «                             t          ¦  «        }||fS )NrŒ   zmask0nocc.png)
ro   rG   rp   r   rõ   r   r&   r•   r=  r  )r   r#   rr   Ú	mask_pathrs   s        r!   rC   zETH3DStereo._read_disparity®  ss   € àÐØ�:å& yÑ1Ô1ˆÝœ˜}Ñ-Ô-ˆÝ˜‘O”OÔ*¨_Ñ<ˆ	Ý”Z 	Ñ*Ô*ˆ
Ý”Z 
Ñ+Ô+×2Ò2µ4Ñ8Ô8ˆ
Ø˜jÐ(Ð(r"   rD   c                 ól   •— t          t          t          ¦   «                              |¦  «        ¦  «        S r˜   r  rx   s     €r!   rR   zETH3DStereo.__getitem__º  r™   r"   rš   )rU   rV   rW   rX   rF   r   rY   r   r
   r   r   r   rG   rH   rC   rZ   r\   rR   r]   r^   s   @r!   r~  r~  f  sü   ø€ € € € € ð/ð /ðb $(Ð ðJð J˜U 3¨ 9Ô-ð J°cð JÐQYÐZbÔQcð JÐosð Jð Jð Jð Jð Jð Jð(
)¨ð 
)°°u¸ZÔ7HÈ%ÐPRÔPZÐ\^Ô\fÐPfÔJgÐ7gÔ1hð 
)ð 
)ð 
)ð 
)ð4 ð 4¨ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r"   r~  )-Ú	functoolsr;  rá   rø   r
  Úabcr   r   r   Úpathlibr   Útypingr   r   r	   r
   r   r   ÚnumpyrG   ÚPILr   Úutilsr   r   r   Úvisionr   rH   r[   r\   Ú__all__Úpartialro   r   r`   r|   r�   r©   r  r+  rG  rX  ry  r~  r   r"   r!   ú<module>r”     s‡  ðØ Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?à Ð Ð Ð Ø Ð Ð Ð Ð Ð à JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ !Ð !Ð !Ð !Ð !Ð !à
ˆ5Œ;˜œ X¨b¬jÔ%9¸2¼:ÐEÔF€Ø
ˆ5Œ;˜œ X¨b¬jÔ%9Ð9Ô:€à
€à"�Ô" 9¸QÐ?Ñ?Ô?€ðn!ð n!ð n!ð n!ð n!˜C ñ n!ô n!ð n!ðb=4ð =4ð =4ð =4ð =4Ð'ñ =4ô =4ð =4ð@R4ð R4ð R4ð R4ð R4Ð+ñ R4ô R4ð R4ðjU4ð U4ð U4ð U4ð U4Ð+ñ U4ô U4ð U4ðp}4ð }4ð }4ð }4ð }4Ð0ñ }4ô }4ð }4ð@U4ð U4ð U4ð U4ð U4Ð%ñ U4ô U4ð U4ðpe4ð e4ð e4ð e4ð e4Ð/ñ e4ô e4ð e4ðPm4ð m4ð m4ð m4ð m4Ð+ñ m4ô m4ð m4ð`w4ð w4ð w4ð w4ð w4Ð(ñ w4ô w4ð w4ðtB4ð B4ð B4ð B4ð B4Ð&ñ B4ô B4ð B4ðJa4ð a4ð a4ð a4ð a4Ð'ñ a4ô a4ð a4ð a4ð a4r"   