
    j                     t    d dl Z d dlmZ d dlZd dlZd dlmZ ddlmZ ddl	m
Z
mZ dgZ G d de          ZdS )	    N)Any)tqdm   )VisionDataset)convert_target_to_relativecrop_bboxes_from_imageSVHNc                   Z     e Zd ZdZdZdZ	 	 	 	 ddededed	ed
eddf fdZde	fdZ
 xZS )r	   a  SVHN dataset from `"The Street View House Numbers (SVHN) Dataset"
    <http://ufldl.stanford.edu/housenumbers/>`_.

    .. image:: https://doctr-static.mindee.com/models?id=v0.5.0/svhn-grid.png&src=0
        :align: center

    >>> from doctr.datasets import SVHN
    >>> train_set = SVHN(train=True, download=True)
    >>> img, target = train_set[0]

    Args:
        train: whether the subset should be the training one
        use_polygons: whether polygons should be considered as rotated bounding box (instead of straight ones)
        recognition_task: whether the dataset should be used for recognition task
        detection_task: whether the dataset should be used for detection task
        **kwargs: keyword arguments from `VisionDataset`.
    )z3http://ufldl.stanford.edu/housenumbers/train.tar.gz@4b17bb33b6cd8f963493168f80143da956f28ec406cc12f8e5745a9f91a51898zsvhn_train.tar)z2http://ufldl.stanford.edu/housenumbers/test.tar.gz@57ac9ceb530e4aa85b55d991be8fc49c695b3d71c6f6a88afea86549efde7fb5zsvhn_test.tarTFtrainuse_polygonsrecognition_taskdetection_taskkwargsreturnNc                 	   |r| j         n| j        \  }}} t                      j        |f||d|st          nd d| |r|rt          d          || _        g | _        t          j	        }	t          j                            | j        |rdnd          }
t          j        t          j                            |
d          d          5 d         }d	         }t!          t#          ||          d
t%          |                    D ]\  }}d                    t'          t(          |d                  d                                                             }t          j                            t          j                            |
|                    s0t/          dt          j                            |
|                     |d                  }|d         j        d         dk    rd |                                D             }n fd|                                D             }t          j        |d         |d         |d         |d         g|	                                          }t9          t'          t:          |d                             }|rt          j        t          j        |d d df         |d d df         gd          t          j        |d d df         |d d df         z   |d d df         gd          t          j        |d d df         |d d df         z   |d d df         |d d df         z   gd          t          j        |d d df         |d d df         |d d df         z   gd          gd          }n\t          j        |d d df         |d d df         |d d df         |d d df         z   |d d df         |d d df         z   gd          }|rt?          t          j                            |
|          |          }t#          ||          D ]Z\  }}|j        d         dk    rD|j        d         dk    r3t%          |          dk    r d|vr| j                             ||f           [|r| j                             ||f           | j                             |tC          ||          f           	 d d d            n# 1 swxY w Y   |
| _        d S ) NT)	file_name	file_hashextract_archivepre_transformsz`recognition_task` and `detection_task` cannot be set to True simultaneously. To get the whole dataset with boxes and labels leave both parameters to False.r   testzdigitStruct.matrzdigitStruct/namezdigitStruct/bboxzPreparing and Loading SVHN)iterabledesctotal r    zunable to locate leftr   c                 N    i | ]"\  }}|t          |d          d                    g#S )r   )int).0kvalss      V/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/doctr/datasets/svhn.py
<dictcomp>z!SVHN.__init__.<locals>.<dictcomp>`   s/    PPPDCQ
OO#4PPP    c                 4    i | ]\  }}|fd |D             S )c                 v    g | ]5}t          |d                   d                                                   6S )r   r   )r!   item)r"   vfs     r%   
<listcomp>z,SVHN.__init__.<locals>.<dictcomp>.<listcomp>b   s9    #J#J#JC!A$(8(8(:(:$;$;#J#J#Jr'   r   )r"   r#   r$   r,   s      r%   r&   z!SVHN.__init__.<locals>.<dictcomp>b   s5    fffwqRV#J#J#J#JT#J#J#Jfffr'   topwidthheight)dtypelabel)axis      )img_pathgeoms )boxeslabels)"TRAINTESTsuper__init__r   
ValueErrorr   datanpfloat32ospathjoinrooth5pyFiler   ziplenmapchrflattenexistsFileNotFoundErrorshapeitemsarray	transposeliststrstackr   appenddict)selfr   r   r   r   r   urlsha256namenp_dtypetmp_rootimg_refsbox_refsimg_refbox_refimg_nameboxbox_dictcoordslabel_targetsbox_targetscropscropr2   r,   	__class__s                           @r%   r?   zSVHN.__init__2   s    +0>DJJTYVT	
 =MW55SW	
 	
 	
 	
 	
  	 	c  
 
VX	:7<<	e+G77HH Yrw||H.?@@#FF 9	`!+,H+,H$(Xx007S[^_g[h[h% % % 6` 6`  773sAgajM",=,E,E,G,G#H#HII w~~bgll8X&F&FGG d+,bXW_@`@`,b,bccc 
mv;$Q'1,,PPCIIKKPPPHHffffZ]ZcZcZeZefffH &(Xf%x8I8T\K]^fn& & &)++  !%Shw.?%@%@ A A .0hHfQQQTlF111a4L%AKKKHfQQQTlVAAAqD\&A6!!!Q$<%PWYZZZHfQQQTlVAAAqD\&A6!!!Q$<RXYZYZYZ\]Y]R^C^%_fhiiiHfQQQTlF111a4L6!!!Q$<4O%PWYZZZ	 / / /KK #%("111a4L"111a4L"111a4L6!!!Q$<7"111a4L6!!!Q$<7	  # # #K $ `2BGLLS[<\<\dopppE'*5-'@'@ < <e:a=1,,A1B1Bs5zzTU~~Z]ejZjZj I,,dE];;;< $ `I$$h%<====I$$h;}0]0]0]%^____m6`9	` 9	` 9	` 9	` 9	` 9	` 9	` 9	` 9	` 9	` 9	` 9	` 9	` 9	` 9	`v 			s   PS""S&)S&c                     d| j          S )Nztrain=)r   )rZ   s    r%   
extra_reprzSVHN.extra_repr   s    $
$$$r'   )TFFF)__name__
__module____qualname____doc__r<   r=   boolr   r?   rV   rn   __classcell__)rl   s   @r%   r	   r	      s         $ED "!&$Y YY Y 	Y
 Y Y 
Y Y Y Y Y Yv%C % % % % % % % %r'   )rD   typingr   rH   numpyrB   r   datasetsr   utilsr   r   __all__r	   r   r'   r%   <module>rz      s    
			                  # # # # # # E E E E E E E E({% {% {% {% {%= {% {% {% {% {%r'   