
    khm(                         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m	Z	m
Z
mZmZmZ d dlmZ ddlmZmZmZ ddlmZ  G d	 d
e      Zy)    N)
namedtuple)Path)AnyCallableDictListOptionalTupleUnion)Image   )extract_archiveiterable_to_strverify_str_arg)VisionDatasetc                       e Zd ZdZ edg d      Zg  eddddddd	d
       eddddddd	d
       eddddddd	d
       eddddddd	d
       eddddddd	d
       eddddddd	d       eddddddd	d       edddddddd       edddddddd       ed d!ddddd	d"       ed#d$ddddd	d%       ed&d'dd(dddd)       ed*d+dd(dddd,       ed-d.dd(dddd/       ed0d1dd(ddd	d2       ed3d4dd(ddd	d5       ed6d7dd(ddd	d8       ed9d:dd;dddd<       ed=d>dd;ddd	d<       ed?d@dd;ddddA       edBdCdd;ddddD       edEdFddGddddH       edIdJd!dGddddK       edLdMd$dLddddN       edOdPd'dQdd	ddR       edSdTd+dQdd	ddU       edVdWd.dXdd	ddY       edZd[d1dXdd	dd\       ed]d^d4dXdd	dd_       ed`daddXdd	d	db       edcddddXdd	d	de       edfdgd7dXdd	ddh       edidjd:dXdd	ddk       edldmd>dXdd	ddn       edodpdpdXddd	dY      Z	 	 	 	 	 	 ddreee	f   dsedteduee
e   ef   dvee   dwee   dxee   dydqf fdzZd{edyeeef   fd|Zdyefd}Zdyefd~Zdedyeeef   fdZdteduedyefdZ xZS )
Cityscapesaw  `Cityscapes <http://www.cityscapes-dataset.com/>`_ Dataset.

    Args:
        root (str or ``pathlib.Path``): Root directory of dataset where directory ``leftImg8bit``
            and ``gtFine`` or ``gtCoarse`` are located.
        split (string, optional): The image split to use, ``train``, ``test`` or ``val`` if mode="fine"
            otherwise ``train``, ``train_extra`` or ``val``
        mode (string, optional): The quality mode to use, ``fine`` or ``coarse``
        target_type (string or list, optional): Type of target to use, ``instance``, ``semantic``, ``polygon``
            or ``color``. Can also be a list to output a tuple with all specified target types.
        transform (callable, optional): A function/transform that takes in a PIL image
            and returns a transformed version. E.g, ``transforms.RandomCrop``
        target_transform (callable, optional): A function/transform that takes in the
            target and transforms it.
        transforms (callable, optional): A function/transform that takes input sample and its target as entry
            and returns a transformed version.

    Examples:

        Get semantic segmentation target

        .. code-block:: python

            dataset = Cityscapes('./data/cityscapes', split='train', mode='fine',
                                 target_type='semantic')

            img, smnt = dataset[0]

        Get multiple targets

        .. code-block:: python

            dataset = Cityscapes('./data/cityscapes', split='train', mode='fine',
                                 target_type=['instance', 'color', 'polygon'])

            img, (inst, col, poly) = dataset[0]

        Validate on the "coarse" set

        .. code-block:: python

            dataset = Cityscapes('./data/cityscapes', split='val', mode='coarse',
                                 target_type='semantic')

            img, smnt = dataset[0]
    CityscapesClass)nameidtrain_idcategorycategory_idhas_instancesignore_in_evalcolor	unlabeledr      voidFT)r   r   r   zego vehicler   zrectification border   z
out of roi   static   dynamic   )o   J   r   ground   )Q   r   r*   road   flat)   @   r.   sidewalk   )   #      parking	   )         z
rail track
   )         building   construction)F   rA   rA   wall   )f   rD      fence   )      rI   z
guard rail   )      rK   bridge   )r<   d   rO   tunnel   )r<   x   Z   pole   object)rI   rI   rI   	polegroup   ztraffic light   )r7   r8      ztraffic sign   )   r\   r   
vegetation   nature)k      r3   terrain   )      rd   sky   )rA      rK   person   human)r\   r[   <   rider   )r   r   r   car   vehicle)r   r   ra   truck   )r   r   rA   bus   )r   rl   rO   caravan   )r   r   rS   trailerrZ   )r   r   n   train   )r   P   rO   
motorcycle    )r   r   r;   bicycle!   )w   r?   r~   zlicense plateNrootsplitmodetarget_type	transformtarget_transform
transformsreturnc           
         t         |   ||||       |dk(  rdnd| _        t        j                  j                  | j                  d|      | _        t        j                  j                  | j                  | j                  |      | _        || _	        || _
        g | _        g | _        t        |dd       |dk(  rd}nd}d	}	|	j                  ||t        |            }	t        |d
||	       t!        |t"              s|g| _	        | j                  D 
cg c]  }
t        |
dd       c}
 t        j                  j%                  | j                        r*t        j                  j%                  | j                        s_|dk(  r+t        j                  j                  | j                  d      }n*t        j                  j                  | j                  d      }| j                  dk(  r8t        j                  j                  | j                  | j                   d      }nF| j                  dk(  r7t        j                  j                  | j                  | j                   d      }t        j                  j'                  |      rNt        j                  j'                        r/t)        || j                         t)        || j                         nt+        d      t        j,                  | j                        D ]E  }t        j                  j                  | j                  |      }t        j                  j                  | j                  |      }t        j,                  |      D ]  }g }| j                  D ]o  }dj                  |j                  d      d   | j/                  | j                  |            }|j1                  t        j                  j                  ||             q | j                  j1                  t        j                  j                  ||             | j                  j1                  |        H y c c}
w )NfinegtFinegtCoarseleftImg8bitr   )r   coarse)rz   testval)rz   train_extrar   zOUnknown value '{}' for argument split if mode is '{}'. Valid values are {{{}}}.r   r   )instancesemanticpolygonr   r   zleftImg8bit_trainextra.zipzleftImg8bit_trainvaltest.zipz_trainvaltest.zipz.zip)	from_pathto_pathzDataset not found or incomplete. Please make sure all required folders for the specified "split" and "mode" are inside the "root" directoryz{}_{}_leftImg8bitr   )super__init__r   ospathjoinr   
images_dirtargets_dirr   r   imagestargetsr   formatr   
isinstancelistisdirisfiler   RuntimeErrorlistdir_get_target_suffixappend)selfr   r   r   r   r   r   r   valid_modesmsgvalueimage_dir_ziptarget_dir_zipcityimg_dir
target_dir	file_nametarget_typesttarget_name	__class__s                       [/var/www/teggl/fontify/venv/lib/python3.12/site-packages/torchvision/datasets/cityscapes.pyr   zCityscapes.__init__i   s+    	z96FG $HJ	'',,tyy-G77<<		499eD&
tV%786>2K9K_jjok&BCug{C8+t, +}D ))	
 5-1]^	

 ww}}T__-RWW]]4CSCS5T% "TYY8T U "TYY8V WyyH$!#diiDII;FW9X!Yj(!#diiDII;d9K!Lww~~m,1O-K.$))L"T 
 JJt/ 	2Dggll4??D9Gd&6&6=JZZ0 	2	!)) OA")..!7:D<S<STXT]T]_`<a#K !''Z(MN	O ""277<<#CD##L1	2	25	
s   Qindexc                    t        j                  | j                  |         j                  d      }g }t	        | j
                        D ]b  \  }}|dk(  r"| j                  | j                  |   |         }n%t        j                  | j                  |   |         }|j                  |       d t        |      dkD  rt        |      n|d   }| j                  | j                  ||      \  }}||fS )a.  
        Args:
            index (int): Index
        Returns:
            tuple: (image, target) where target is a tuple of all target types if target_type is a list with more
            than one item. Otherwise, target is a json object if target_type="polygon", else the image segmentation.
        RGBr   r   r   )r   openr   convert	enumerater   
_load_jsonr   r   lentupler   )r   r   imager   ir   targets          r   __getitem__zCityscapes.__getitem__   s     

4;;u-.66u=d../ 	#DAqI~e)<Q)?@DLL$7$:;NN6"	# $'w<!#3w??& OOE6:ME6f}    c                 ,    t        | j                        S N)r   r   )r   s    r   __len__zCityscapes.__len__   s    4;;r   c                 `    g d} dj                  |      j                  di | j                  S )N)zSplit: {split}zMode: {mode}zType: {target_type}
 )r   r   __dict__)r   liness     r   
extra_reprzCityscapes.extra_repr   s*    I&tyy&&777r   r   c                 r    t        |      5 }t        j                  |      }d d d        |S # 1 sw Y   S xY wr   )r   jsonload)r   r   filedatas       r   r   zCityscapes._load_json   s2    $Z 	#499T?D	#	#s   ,6c                 H    |dk(  r| dS |dk(  r| dS |dk(  r| dS | dS )Nr   z_instanceIds.pngr   z_labelIds.pngr   z
_color.pngz_polygons.jsonr   )r   r   r   s      r   r   zCityscapes._get_target_suffix   sO    *$V+,,J&V=))G#V:&&V>**r   )rz   r   r   NNN)__name__
__module____qualname____doc__r   r   classesr   strr   r   r	   r   r   intr
   r   r   r   r   r   r   r   __classcell__)r   s   @r   r   r      s   -` !iO
$QVQtYO$q#vq%yQ$ 	.35$PYZ$ 	afaiP	$
 	!S&!UD)L$ 		1c61eT<P$ 	!S&!UD+N$ 	1fa~N$ 	
Aq&!UE>R$ 		1c61eT?S$ 	b#vq%W$ 	
B>1eULY$ 	A~q%X$ 	Q5%Y$ 	b#~q%_$  	"c>1eT?[!$" 	"c>1eT>Z#$$ 	AxE5/R%$& 	Rh5$X'$( 	Q!UE>Z)$* 	AxE5-X+$, 	b!Xq%W-$. 		2q(Aue_U/$0 	r2ua~N1$2 	"b'1dE=Q3$4 	R!T5+N5$6 	r2y!T5+N7$8 	RAtUJO9$: 	r2y!T5,O;$< 		2sIq$jQ=$> 		2sIq$kR?$@ 	RAtULQA$B 	b"iD%UC$D 		2r9aumTE$F 	RAudKXG$GR -7(,/3)-D2CID2 D2 	D2
 49c>*D2 H%D2 #8,D2 X&D2 
D2L sCx 6   8C 8s tCH~ 
+s + + +r   r   )r   r   collectionsr   pathlibr   typingr   r   r   r   r	   r
   r   PILr   utilsr   r   r   visionr   r   r   r   r   <module>r      s4     	 "  D D D  C C !Q+ Q+r   