
    |j'                    @   d dl mZ d dlZd dlZd dlmZmZmZ d dlZ	d dl
mZ d dlmZ d dlZd dlmZ d dlmZ er"d dl
mZ d dlmZ d dlmZ d	d
lmZmZ ed         Zg ZdZedz   ZdZedz   ZdZ dddddZ! G d dee"d                            Z# G d de#          Z$dS )    )annotationsN)TYPE_CHECKINGAnyLiteral)Image)_check_exists_and_download)Dataset)_DTypeLiteral)
_Transform   )_ImageBackend_ImageDataTypetraintestz$https://dataset.bj.bcebos.com/cifar/zcifar-10-python.tar.gz c58f30108f718f92721af3b95e74349azcifar-100-python.tar.gz eb9058c3a382ffc7106e4002c42a8d85
data_batch
test_batchr   r   )train10test10train100test100c                  t    e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   	 	 	 	 	 dddZd Zd ZddZd Z	dS )Cifar10a9
  
    Implementation of `Cifar-10 <https://www.cs.toronto.edu/~kriz/cifar.html>`_
    dataset, which has 10 categories.

    Args:
        data_file (str|None, optional): Path to data file, can be set None if
            :attr:`download` is True. Default None, default data path: ~/.cache/paddle/dataset/cifar
        mode (str, optional): Either train or test mode. Default 'train'.
        transform (Callable|None, optional): transform to perform on image, None for no transform. Default: None.
        download (bool, optional): download dataset automatically if :attr:`data_file` is None. Default True.
        backend (str|None, optional): Specifies which type of image to be returned:
            PIL.Image or numpy.ndarray. Should be one of {'pil', 'cv2'}.
            If this option is not set, will get backend from :ref:`paddle.vision.get_image_backend <api_paddle_vision_get_image_backend>`,
            default backend is 'pil'. Default: None.

    Returns:
        :ref:`api_paddle_io_Dataset`. An instance of Cifar10 dataset.

    Examples:

        .. code-block:: python

            >>> # doctest: +TIMEOUT(60)
            >>> import itertools
            >>> import paddle.vision.transforms as T
            >>> from paddle.vision.datasets import Cifar10

            >>> cifar10 = Cifar10()
            >>> print(len(cifar10))
            50000

            >>> for i in range(5):  # only show first 5 images
            ...     img, label = cifar10[i]
            ...     # do something with img and label
            ...     print(type(img), img.size, label)
            ...     # <class 'PIL.Image.Image'> (32, 32) 6


            >>> transform = T.Compose(
            ...     [
            ...         T.Resize(64),
            ...         T.ToTensor(),
            ...         T.Normalize(
            ...             mean=[0.5, 0.5, 0.5],
            ...             std=[0.5, 0.5, 0.5],
            ...             to_rgb=True,
            ...         ),
            ...     ]
            ... )
            >>> cifar10_test = Cifar10(
            ...     mode="test",
            ...     transform=transform,  # apply transform to every image
            ...     backend="cv2",  # use OpenCV as image transform backend
            ... )
            >>> print(len(cifar10_test))
            10000

            >>> for img, label in itertools.islice(iter(cifar10_test), 5):  # only show first 5 images
            ...     # do something with img and label
            ...     print(type(img), img.shape, label)  # type: ignore
            ...     # <class 'paddle.Tensor'> [3, 64, 64] 3

    _DatasetModemoder   backend
str | None	data_file_Transform[Any, Any] | None	transformr
   dtypeNr   Tdownloadbool_ImageBackend | NonereturnNonec                   |                                 dv sJ d|             |                                 | _        |t          j                                        }|dvrt          d|           || _        |                                  || _        | j        .|s
J d            t          || j
        | j        d|          | _        || _        |                                  t          j                    | _        d S )Nr   z2mode.lower() should be 'train' or 'test', but got )pilcv2z4Expected backend are one of ['pil', 'cv2'], but got z>data_file is not set and downloading automatically is disabledcifar)lowerr   paddlevisionget_image_backend
ValueErrorr   _init_url_md5_flagr    r   data_urldata_md5r"   
_load_dataget_default_dtyper#   )selfr    r   r"   r$   r   s         l/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddle/vision/datasets/cifar.py__init__zCifar10.__init__}   s(    zz||  
 
 
 
 GFF
 
 
 JJLL	?m5577G.((PwPP   !!!">!  P 8 84=$-( DN # 	-//


    c                j    t           | _        t          | _        t          | j        dz            | _        d S )N10)CIFAR10_URLr3   CIFAR10_MD5r4   MODE_FLAG_MAPr   flagr7   s    r8   r2   zCifar10._init_url_md5_flag   s'    ##!$)d"23			r:   c           	         g  _         t          j         j        d          5 } fd|D             }t	          |          }|D ]}t          j        |                    |          d          }|d         }|                    d|                    dd                     }|J t          ||          D ]!\  }} j         
                    ||f           "	 d d d            d S # 1 swxY w Y   d S )	Nr)r   c              3  B   K   | ]}j         |j        v |j        V  d S N)r@   name).0	each_itemr7   s     r8   	<genexpr>z%Cifar10._load_data.<locals>.<genexpr>   s<        #,TY).5P5P	5P5P5P5P r:   bytes)encodings   datas   labelss   fine_labels)datatarfileopenr    sortedpickleloadextractfilegetzipappend)	r7   fnamesrF   batchrL   labelssamplelabels	   `        r8   r5   zCifar10._load_data   s`   	\$.s333 	6q   01  E 5MME 6 6AMM$$7$7'JJJW~9eii.M.MNN)))%(v%6%6 6 6MFEI$$fe_555566	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   B4C&&C*-C*idxint'tuple[_ImageDataType, npt.NDArray[Any]]c                   | j         |         \  }}t          j        |g d          }|                    g d          }| j        dk    r't          j        |                    d                    }| j        |                     |          }| j        dk    r)|t          j	        |                              d          fS |                    | j
                  t          j	        |                              d          fS )N)       ra   )   r   r   r*   uint8int64)rL   npreshape	transposer   r   	fromarrayastyper"   arrayr#   )r7   r\   imager[   s       r8   __getitem__zCifar10.__getitem__   s    y~u
5+++..			**<5  OELL$9$9::E>%NN5))E<5  "(5//009999||DJ''%)?)?)H)HHHr:   c                *    t          | j                  S rE   )lenrL   rA   s    r8   __len__zCifar10.__len__   s    49~~r:   Nr   NTNr    r   r   r   r"   r!   r$   r%   r   r&   r'   r(   )r\   r]   r'   r^   )
__name__
__module____qualname____doc____annotations__r9   r2   r5   rl   ro    r:   r8   r   r   6   s         > >@ **** !%$15(,&0 &0 &0 &0 &0P4 4 4
6 6 6$I I I I    r:   r   )r   znpt.NDArray[Any]c                  6     e Zd ZdZ	 	 	 	 	 dd fdZd Z xZS )Cifar100aI
  
    Implementation of `Cifar-100 <https://www.cs.toronto.edu/~kriz/cifar.html>`_
    dataset, which has 100 categories.

    Args:
        data_file (str|None, optional): path to data file, can be set None if
            :attr:`download` is True. Default: None, default data path: ~/.cache/paddle/dataset/cifar
        mode (str, optional): Either train or test mode. Default 'train'.
        transform (Callable|None, optional): transform to perform on image, None for no transform. Default: None.
        download (bool, optional): download dataset automatically if :attr:`data_file` is None. Default True.
        backend (str|None, optional): Specifies which type of image to be returned:
            PIL.Image or numpy.ndarray. Should be one of {'pil', 'cv2'}.
            If this option is not set, will get backend from :ref:`paddle.vision.get_image_backend <api_paddle_vision_get_image_backend>`,
            default backend is 'pil'. Default: None.

    Returns:
        :ref:`api_paddle_io_Dataset`. An instance of Cifar100 dataset.

    Examples:

        .. code-block:: python

            >>> # doctest: +TIMEOUT(60)
            >>> import itertools
            >>> import paddle.vision.transforms as T
            >>> from paddle.vision.datasets import Cifar100

            >>> cifar100 = Cifar100()
            >>> print(len(cifar100))
            50000

            >>> for i in range(5):  # only show first 5 images
            ...     img, label = cifar100[i]
            ...     # do something with img and label
            ...     print(type(img), img.size, label)
            ...     # <class 'PIL.Image.Image'> (32, 32) 19


            >>> transform = T.Compose(
            ...     [
            ...         T.Resize(64),
            ...         T.ToTensor(),
            ...         T.Normalize(
            ...             mean=[0.5, 0.5, 0.5],
            ...             std=[0.5, 0.5, 0.5],
            ...             to_rgb=True,
            ...         ),
            ...     ]
            ... )

            >>> cifar100_test = Cifar100(
            ...     mode="test",
            ...     transform=transform,  # apply transform to every image
            ...     backend="cv2",  # use OpenCV as image transform backend
            ... )
            >>> print(len(cifar100_test))
            10000

            >>> for img, label in itertools.islice(iter(cifar100_test), 5):  # only show first 5 images
            ...     # do something with img and label
            ...     print(type(img), img.shape, label)  # type: ignore
            ...     # <class 'paddle.Tensor'> [3, 64, 64] 49

    Nr   Tr    r   r   r   r"   r!   r$   r%   r   r&   r'   r(   c                R    t                                          |||||           d S rE   )superr9   )r7   r    r   r"   r$   r   	__class__s         r8   r9   zCifar100.__init__  s+     	D)XwGGGGGr:   c                j    t           | _        t          | _        t          | j        dz            | _        d S )N100)CIFAR100_URLr3   CIFAR100_MD5r4   r?   r   r@   rA   s    r8   r2   zCifar100._init_url_md5_flag  s'    $$!$)e"34			r:   rp   rq   )rr   rs   rt   ru   r9   r2   __classcell__)r|   s   @r8   ry   ry      st        ? ?F !%$15(,H H H H H H H5 5 5 5 5 5 5r:   ry   )%
__future__r   rP   rM   typingr   r   r   numpyre   numpy.typingnptPILr   r.   paddle.dataset.commonr   	paddle.ior	   paddle._typing.dtype_liker
   #paddle.vision.transforms.transformsr   rk   r   r   r   __all__
URL_PREFIXr=   r>   r   r   r?   tupler   ry   rw   r:   r8   <module>r      s   # " " " " "   . . . . . . . . . .                  < < < < < <       ,777777>>>>>>55555555?+L
3
330551 	 V V V V Vge@AB V V VrO5 O5 O5 O5 O5w O5 O5 O5 O5 O5r:   