





'''simple docstring'''


from __future__ import annotations

from pprint import pformat
from typing import Generic, TypeVar

lowerCAmelCase :					Dict 							=TypeVar('''T''')
class 				a_       (    Generic[T]							):





     def __init__(			self		: Any     ,				lowercase		: bool = True						):





        """simple docstring"""




        lowercase_      :dict[T, list[T]]         =			{}  # dictionary of lists
        lowercase_      :List[Any]         =			directed





     def 							lowercase__				(			self		: Any     ,				lowercase		: T     ,				lowercase		: T						):





        """simple docstring"""




        if not self.directed:  # For undirected graphs
           # if both source vertex and destination vertex are both present in the
           # adjacency list, add destination vertex to source vertex list of adjacent
           # vertices and add source vertex to destination vertex list of adjacent
           # vertices.
           if source_vertex in self.adj_list and destination_vertex in self.adj_list:
              self.adj_list[source_vertex].append(UpperCAmelCase_						)
              self.adj_list[destination_vertex].append(UpperCAmelCase_						)
           # if only source vertex is present in adjacency list, add destination vertex
           # to source vertex list of adjacent vertices, then create a new vertex with
           # destination vertex as key and assign a list containing the source vertex
           # as it's first adjacent vertex.
           elif source_vertex in self.adj_list:
              self.adj_list[source_vertex].append(UpperCAmelCase_						)
              lowercase_      :Any         =			[source_vertex]
           # if only destination vertex is present in adjacency list, add source vertex
           # to destination vertex list of adjacent vertices, then create a new vertex
           # with source vertex as key and assign a list containing the source vertex
           # as it's first adjacent vertex.
           elif destination_vertex in self.adj_list:
              self.adj_list[destination_vertex].append(UpperCAmelCase_						)
              lowercase_      :Tuple         =			[destination_vertex]
           # if both source vertex and destination vertex are not present in adjacency
           # list, create a new vertex with source vertex as key and assign a list
           # containing the destination vertex as it's first adjacent vertex also
           # create a new vertex with destination vertex as key and assign a list
           # containing the source vertex as it's first adjacent vertex.
           else:
              lowercase_      :Tuple         =			[destination_vertex]
              lowercase_      :Optional[Any]         =			[source_vertex]
        else:  # For directed graphs
           # if both source vertex and destination vertex are present in adjacency
           # list, add destination vertex to source vertex list of adjacent vertices.
           if source_vertex in self.adj_list and destination_vertex in self.adj_list:
              self.adj_list[source_vertex].append(UpperCAmelCase_						)
           # if only source vertex is present in adjacency list, add destination
           # vertex to source vertex list of adjacent vertices and create a new vertex
           # with destination vertex as key, which has no adjacent vertex
           elif source_vertex in self.adj_list:
              self.adj_list[source_vertex].append(UpperCAmelCase_						)
              lowercase_      :str         =			[]
           # if only destination vertex is present in adjacency list, create a new
           # vertex with source vertex as key and assign a list containing destination
           # vertex as first adjacent vertex
           elif destination_vertex in self.adj_list:
              lowercase_      :Any         =			[destination_vertex]
           # if both source vertex and destination vertex are not present in adjacency
           # list, create a new vertex with source vertex as key and a list containing
           # destination vertex as it's first adjacent vertex. Then create a new vertex
           # with destination vertex as key, which has no adjacent vertex
           else:
              lowercase_      :Dict         =			[destination_vertex]
              lowercase_      :Optional[Any]         =			[]

        return self







     def __repr__(			self		: Dict						):





        """simple docstring"""




        return pformat(self.adj_list						)









'''simple docstring'''


from ...configuration_utils import PretrainedConfig
from ...utils import logging


lowerCAmelCase :					Tuple 							=logging.get_logger(__name__)

lowerCAmelCase :					str 							={
    '''microsoft/cvt-13''': '''https://huggingface.co/microsoft/cvt-13/resolve/main/config.json''',
    # See all Cvt models at https://huggingface.co/models?filter=cvt
}
class 				a_       (    _lowerCAmelCase							):
     __A								=      "cvt"





     def __init__(			self		: Tuple     ,				lowercase		: str=3     ,				lowercase		: str=[7, 3, 3]     ,				lowercase		: List[str]=[4, 2, 2]     ,				lowercase		: Dict=[2, 1, 1]     ,				lowercase		: int=[64, 192, 384]     ,				lowercase		: Dict=[1, 3, 6]     ,				lowercase		: Dict=[1, 2, 10]     ,				lowercase		: Any=[4.0, 4.0, 4.0]     ,				lowercase		: Tuple=[0.0, 0.0, 0.0]     ,				lowercase		: List[str]=[0.0, 0.0, 0.0]     ,				lowercase		: List[str]=[0.0, 0.0, 0.1]     ,				lowercase		: Any=[True, True, True]     ,				lowercase		: Any=[False, False, True]     ,				lowercase		: Optional[Any]=["dw_bn", "dw_bn", "dw_bn"]     ,				lowercase		: int=[3, 3, 3]     ,				lowercase		: str=[1, 1, 1]     ,				lowercase		: List[Any]=[2, 2, 2]     ,				lowercase		: Tuple=[1, 1, 1]     ,				lowercase		: Optional[Any]=[1, 1, 1]     ,				lowercase		: str=0.02     ,				lowercase		: str=1e-1_2     ,				**lowercase		: str     ,				):





        """simple docstring"""




        super().__init__(**lowercase						)
        lowercase_      :List[Any]         =			num_channels
        lowercase_      :Union[str, Any]         =			patch_sizes
        lowercase_      :Tuple         =			patch_stride
        lowercase_      :List[Any]         =			patch_padding
        lowercase_      :List[Any]         =			embed_dim
        lowercase_      :Union[str, Any]         =			num_heads
        lowercase_      :Any         =			depth
        lowercase_      :str         =			mlp_ratio
        lowercase_      :List[str]         =			attention_drop_rate
        lowercase_      :List[Any]         =			drop_rate
        lowercase_      :Union[str, Any]         =			drop_path_rate
        lowercase_      :Any         =			qkv_bias
        lowercase_      :Dict         =			cls_token
        lowercase_      :int         =			qkv_projection_method
        lowercase_      :Union[str, Any]         =			kernel_qkv
        lowercase_      :Optional[Any]         =			padding_kv
        lowercase_      :Optional[Any]         =			stride_kv
        lowercase_      :Dict         =			padding_q
        lowercase_      :Any         =			stride_q
        lowercase_      :Dict         =			initializer_range
        lowercase_      :Optional[Any]         =			layer_norm_eps


