
    zjk                        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Z	d dl
mZ d dlZd dlmZmZ d dlmZ d dlmZ erd d	lmZ g Z G d
 de          Z	 	 	 dddZ e            dd            ZdS )    )annotationsN)OrderedDict)TYPE_CHECKING)	TypedDict)Tensornn)no_grad)	InputSpec)Sequencec                  $    e Zd ZU ded<   ded<   dS )ModelSummaryinttotal_paramstrainable_paramsN)__name__
__module____qualname____annotations__     i/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddle/hapi/model_summary.pyr   r   $   s*         r   r   netnn.Layer
input_sizeLint | tuple[int, ...] | InputSpec | list[tuple[int, ...] | InputSpec] | Nonedtypesstr | Sequence[str] | Noneinput4Tensor | Sequence[Tensor] | dict[str, Tensor] | Nonereturnc                   ||t          d          ||t          j        |          rt          |j                  }nt          |t          t          f          r/g }|D ])}|                    t          |j                             *nt          |t                    rGg }|	                                D ]/}|                    t          ||         j                             0nHt          |t          j
        j        j                  rt          |j                  }nt          d          t          |t                    rt          |j                  }nt          |t                    rg }|D ]}t          |t                    r|f}t          |t          t          f          sJ dt          |                       t          |t                    r(|                    t          |j                             |                    |           nt          |t                    r|f}n|}t          j                    st#          j        d           d}n| j        }|r|                                  d d fd	 |          }t+          | |||          \  }	}
t-          |	           |r|                                  |
S )
aL7  Prints a string summary of the network.

    Args:
        net (Layer): The network which must be a subinstance of Layer.
        input_size (tuple|InputSpec|list[tuple|InputSpec]|None, optional): Size of input tensor. if model only
                    have one input, input_size can be tuple or InputSpec. if model
                    have multiple input, input_size must be a list which contain
                    every input's shape. Note that input_size only dim of
                    batch_size can be None or -1. Default: None. Note that
                    input_size and input cannot be None at the same time.
        dtypes (str|Sequence[str]|None, optional): If dtypes is None, 'float32' will be used, Default: None.
        input (Tensor|Sequence[paddle.Tensor]|dict[str, paddle.Tensor]|None, optional): If input is given, input_size and dtype will be ignored, Default: None.

    Returns:
        dict: A summary of the network including total params and total trainable params.

    Examples:
        .. code-block:: python
            :name: code-example-1

            >>> # example 1: Single Input Demo
            >>> import paddle
            >>> import paddle.nn as nn
            >>> # Define Network
            >>> class LeNet(nn.Layer):
            ...     def __init__(self, num_classes=10):
            ...         super().__init__()
            ...         self.num_classes = num_classes
            ...         self.features = nn.Sequential(
            ...             nn.Conv2D(1, 6, 3, stride=1, padding=1),
            ...             nn.ReLU(),
            ...             nn.MaxPool2D(2, 2),
            ...             nn.Conv2D(6, 16, 5, stride=1, padding=0),
            ...             nn.ReLU(),
            ...             nn.MaxPool2D(2, 2))
            ...
            ...         if num_classes > 0:
            ...             self.fc = nn.Sequential(
            ...                 nn.Linear(400, 120),
            ...                 nn.Linear(120, 84),
            ...                 nn.Linear(84, 10))
            ...
            ...     def forward(self, inputs):
            ...         x = self.features(inputs)
            ...
            ...         if self.num_classes > 0:
            ...             x = paddle.flatten(x, 1)
            ...             x = self.fc(x)
            ...         return x
            ...
            >>> lenet = LeNet()
            >>> params_info = paddle.summary(lenet, (1, 1, 28, 28)) # doctest: +NORMALIZE_WHITESPACE
            ---------------------------------------------------------------------------
             Layer (type)       Input Shape          Output Shape         Param #
            ===========================================================================
               Conv2D-1       [[1, 1, 28, 28]]      [1, 6, 28, 28]          60
                ReLU-1        [[1, 6, 28, 28]]      [1, 6, 28, 28]           0
              MaxPool2D-1     [[1, 6, 28, 28]]      [1, 6, 14, 14]           0
               Conv2D-2       [[1, 6, 14, 14]]     [1, 16, 10, 10]         2,416
                ReLU-2       [[1, 16, 10, 10]]     [1, 16, 10, 10]           0
              MaxPool2D-2    [[1, 16, 10, 10]]      [1, 16, 5, 5]            0
               Linear-1          [[1, 400]]            [1, 120]           48,120
               Linear-2          [[1, 120]]            [1, 84]            10,164
               Linear-3          [[1, 84]]             [1, 10]              850
            ===========================================================================
            Total params: 61,610
            Trainable params: 61,610
            Non-trainable params: 0
            ---------------------------------------------------------------------------
            Input size (MB): 0.00
            Forward/backward pass size (MB): 0.11
            Params size (MB): 0.24
            Estimated Total Size (MB): 0.35
            ---------------------------------------------------------------------------
            <BLANKLINE>
            >>> print(params_info)
            {'total_params': 61610, 'trainable_params': 61610}

        .. code-block:: python
            :name: code-example-2

            >>> # example 2: multi input demo
            >>> import paddle
            >>> import paddle.nn as nn
            >>> class LeNetMultiInput(nn.Layer):
            ...     def __init__(self, num_classes=10):
            ...         super().__init__()
            ...         self.num_classes = num_classes
            ...         self.features = nn.Sequential(
            ...             nn.Conv2D(1, 6, 3, stride=1, padding=1),
            ...             nn.ReLU(),
            ...             nn.MaxPool2D(2, 2),
            ...             nn.Conv2D(6, 16, 5, stride=1, padding=0),
            ...             nn.ReLU(),
            ...             nn.MaxPool2D(2, 2))
            ...
            ...         if num_classes > 0:
            ...             self.fc = nn.Sequential(
            ...                 nn.Linear(400, 120),
            ...                 nn.Linear(120, 84),
            ...                 nn.Linear(84, 10))
            ...
            ...     def forward(self, inputs, y):
            ...         x = self.features(inputs)
            ...
            ...         if self.num_classes > 0:
            ...             x = paddle.flatten(x, 1)
            ...             x = self.fc(x + y)
            ...         return x
            ...
            >>> lenet_multi_input = LeNetMultiInput()

            >>> params_info = paddle.summary(lenet_multi_input,
            ...                              [(1, 1, 28, 28), (1, 400)],
            ...                              dtypes=['float32', 'float32']) # doctest: +NORMALIZE_WHITESPACE
            ---------------------------------------------------------------------------
             Layer (type)       Input Shape          Output Shape         Param #
            ===========================================================================
               Conv2D-1       [[1, 1, 28, 28]]      [1, 6, 28, 28]          60
                ReLU-1        [[1, 6, 28, 28]]      [1, 6, 28, 28]           0
              MaxPool2D-1     [[1, 6, 28, 28]]      [1, 6, 14, 14]           0
               Conv2D-2       [[1, 6, 14, 14]]     [1, 16, 10, 10]         2,416
                ReLU-2       [[1, 16, 10, 10]]     [1, 16, 10, 10]           0
              MaxPool2D-2    [[1, 16, 10, 10]]      [1, 16, 5, 5]            0
               Linear-1          [[1, 400]]            [1, 120]           48,120
               Linear-2          [[1, 120]]            [1, 84]            10,164
               Linear-3          [[1, 84]]             [1, 10]              850
            ===========================================================================
            Total params: 61,610
            Trainable params: 61,610
            Non-trainable params: 0
            ---------------------------------------------------------------------------
            Input size (MB): 0.00
            Forward/backward pass size (MB): 0.11
            Params size (MB): 0.24
            Estimated Total Size (MB): 0.35
            ---------------------------------------------------------------------------
            <BLANKLINE>
            >>> print(params_info)
            {'total_params': 61610, 'trainable_params': 61610}

        .. code-block:: python
            :name: code-example-3

            >>> # example 3: List Input Demo
            >>> import paddle
            >>> import paddle.nn as nn

            >>> # list input demo
            >>> class LeNetListInput(nn.Layer):
            ...     def __init__(self, num_classes=10):
            ...         super().__init__()
            ...         self.num_classes = num_classes
            ...         self.features = nn.Sequential(
            ...             nn.Conv2D(1, 6, 3, stride=1, padding=1),
            ...             nn.ReLU(),
            ...             nn.MaxPool2D(2, 2),
            ...             nn.Conv2D(6, 16, 5, stride=1, padding=0),
            ...             nn.ReLU(),
            ...             nn.MaxPool2D(2, 2))
            ...
            ...         if num_classes > 0:
            ...             self.fc = nn.Sequential(
            ...                 nn.Linear(400, 120),
            ...                 nn.Linear(120, 84),
            ...                 nn.Linear(84, 10))
            ...
            ...     def forward(self, inputs):
            ...         x = self.features(inputs[0])
            ...
            ...         if self.num_classes > 0:
            ...             x = paddle.flatten(x, 1)
            ...             x = self.fc(x + inputs[1])
            ...         return x
            ...
            >>> lenet_list_input = LeNetListInput()
            >>> input_data = [paddle.rand([1, 1, 28, 28]), paddle.rand([1, 400])]
            >>> params_info = paddle.summary(lenet_list_input, input=input_data) # doctest: +NORMALIZE_WHITESPACE
            ---------------------------------------------------------------------------
             Layer (type)       Input Shape          Output Shape         Param #
            ===========================================================================
               Conv2D-1       [[1, 1, 28, 28]]      [1, 6, 28, 28]          60
                ReLU-1        [[1, 6, 28, 28]]      [1, 6, 28, 28]           0
              MaxPool2D-1     [[1, 6, 28, 28]]      [1, 6, 14, 14]           0
               Conv2D-2       [[1, 6, 14, 14]]     [1, 16, 10, 10]         2,416
                ReLU-2       [[1, 16, 10, 10]]     [1, 16, 10, 10]           0
              MaxPool2D-2    [[1, 16, 10, 10]]      [1, 16, 5, 5]            0
               Linear-1          [[1, 400]]            [1, 120]           48,120
               Linear-2          [[1, 120]]            [1, 84]            10,164
               Linear-3          [[1, 84]]             [1, 10]              850
            ===========================================================================
            Total params: 61,610
            Trainable params: 61,610
            Non-trainable params: 0
            ---------------------------------------------------------------------------
            Input size (MB): 0.00
            Forward/backward pass size (MB): 0.11
            Params size (MB): 0.24
            Estimated Total Size (MB): 0.35
            ---------------------------------------------------------------------------
            <BLANKLINE>
            >>> print(params_info)
            {'total_params': 61610, 'trainable_params': 61610}


        .. code-block:: python
            :name: code-example-4

            >>> # example 4: Dict Input Demo
            >>> import paddle
            >>> import paddle.nn as nn

            >>> # Dict input demo
            >>> class LeNetDictInput(nn.Layer):
            ...     def __init__(self, num_classes=10):
            ...         super().__init__()
            ...         self.num_classes = num_classes
            ...         self.features = nn.Sequential(
            ...             nn.Conv2D(1, 6, 3, stride=1, padding=1),
            ...             nn.ReLU(),
            ...             nn.MaxPool2D(2, 2),
            ...             nn.Conv2D(6, 16, 5, stride=1, padding=0),
            ...             nn.ReLU(),
            ...             nn.MaxPool2D(2, 2))
            ...
            ...         if num_classes > 0:
            ...             self.fc = nn.Sequential(
            ...                 nn.Linear(400, 120),
            ...                 nn.Linear(120, 84),
            ...                 nn.Linear(84, 10))
            ...
            ...     def forward(self, inputs):
            ...         x = self.features(inputs['x1'])
            ...
            ...         if self.num_classes > 0:
            ...             x = paddle.flatten(x, 1)
            ...             x = self.fc(x + inputs['x2'])
            ...         return x
            ...
            >>> lenet_dict_input = LeNetDictInput()
            >>> input_data = {'x1': paddle.rand([1, 1, 28, 28]),
            ...               'x2': paddle.rand([1, 400])}
            >>> # The module suffix number indicates its sequence in modules of the same type, used for differentiation identification
            >>> params_info = paddle.summary(lenet_dict_input, input=input_data) # doctest: +NORMALIZE_WHITESPACE
            ---------------------------------------------------------------------------
             Layer (type)       Input Shape          Output Shape         Param #
            ===========================================================================
               Conv2D-1       [[1, 1, 28, 28]]      [1, 6, 28, 28]          60
                ReLU-1        [[1, 6, 28, 28]]      [1, 6, 28, 28]           0
              MaxPool2D-1     [[1, 6, 28, 28]]      [1, 6, 14, 14]           0
               Conv2D-2       [[1, 6, 14, 14]]     [1, 16, 10, 10]         2,416
                ReLU-2       [[1, 16, 10, 10]]     [1, 16, 10, 10]           0
              MaxPool2D-2    [[1, 16, 10, 10]]      [1, 16, 5, 5]            0
               Linear-1          [[1, 400]]            [1, 120]           48,120
               Linear-2          [[1, 120]]            [1, 84]            10,164
               Linear-3          [[1, 84]]             [1, 10]              850
            ===========================================================================
            Total params: 61,610
            Trainable params: 61,610
            Non-trainable params: 0
            ---------------------------------------------------------------------------
            Input size (MB): 0.00
            Forward/backward pass size (MB): 0.11
            Params size (MB): 0.24
            Estimated Total Size (MB): 0.35
            ---------------------------------------------------------------------------
            <BLANKLINE>
            >>> print(params_info)
            {'total_params': 61610, 'trainable_params': 61610}
    Nz4input_size and input cannot be None at the same timezcInput is not tensor, list, tuple and dict, unable to determine input_size, please input input_size.z`When input_size is list,             expect item in input_size is a tuple or InputSpec, but got zZYour model was created in static graph mode, this may not get correct summary information!Fc                N    | D ]!}t          |t          t          f          r dS "dS NFT
isinstancelisttuple)shapeitems     r   	_is_shapezsummary.<locals>._is_shapex  s8     	 	D$u.. uutr   c                N   d}g }t          t          |                     D ]v}| |         }||dk    r|dz  }|dk    rt          d          d}n2t          |t          j                  r|dk    rt          d|           |                    |           wt          |          S )Nr      z?Option input_size only the dim of batch_size can be None or -1.z:Expected element in input size greater than zero, but got )rangelen
ValueErrorr%   numbersNumberappendr'   )r(   num_unknown	new_shapeir)   s        r   _check_shapezsummary.<locals>._check_shape~  s    	s5zz"" 	# 	#A8D|trzzq ??$Y   D'.11 199$[UY[[   T""""Yr   c                    t          | t          t          f          r |           r |           S fd| D             S )Nc                &    g | ]} |          S r   r   ).0r6   _check_inputs     r   
<listcomp>z1summary.<locals>._check_input.<locals>.<listcomp>  s!    888LLOO888r   r$   )r   r;   r7   r*   s    r   r;   zsummary.<locals>._check_input  sT    j4-00 	9YYz5J5J 	9<
+++8888Z8888r   )r0   paddle	is_tensorr'   r(   r%   r&   r3   dictkeysbase	frameworkVariabler
   r   typein_dynamic_modewarningswarntrainingevalsummary_stringprinttrain)r   r   r   r   xkey_input_sizer)   in_train_moderesultparams_infor;   r7   r*   s              @@@r   summaryrS   )   s0   t emOPPPe/E"" 	u{++JJe}-- 	J 2 2!!%..11112t$$ 		Jzz|| ; ;!!%c
(8"9"9::::;v{4=>> 	u{++JJu   *i(( !J,--	J	%	% ! 	) 	)D$$$ wdUI$677  UHLT

U U 7
 $	** )""5#4#45555""4((((	) 
J	$	$ !!m !## %h	
 	
 	
  


       (9 9 9 9 9 9 9 ,{++K(k65IIFK	&MMM 		r   c                *    d fdt          |t          t          f          s ||          }d}d}t          t                                                               fdfd fd}t          |t                    r|g}fdt                      g                      |           ||}  |           n ||          }  |  D ]}|                                 d	 }	 |	          }
|d
|
d         z  dz   z  }d                    d|
d         d|
d         d|
d         d|
d                   }||dz   z  }|d|
d         z  dz   z  }d}d}d}d}D ]F}d                    ||
d         t          |         d                   |
d         t          |         d                   |
d         d                    |         d                   |
d                   }||         d         z  }	 |t          j        t          j        |         d         d                    z  }nC#  |         d         D ]-}|t          j        t          j        |d                    z  }.Y nxY wd|         v r|         d         r||         d         z  }||dz   z  }Hfd  |d          }t          d!|z  d"z  d#z            }t          |d"z  d#z            }||z   |z   }|d|
d         z  dz   z  }|d$|d%dz   z  }|d&|d%dz   z  }|d'||z
  d%dz   z  }|d
|
d         z  dz   z  }|d(|d)dz   z  }|d*|d)dz   z  }|d+|d)dz   z  }|d,|d)dz   z  }|d
|
d         z  dz   z  }|||d-fS ).Nc                J    | D ]}t          |t          j                  s dS  dS r#   )r%   r1   r2   )itemsr)   s     r   _all_is_numberz&summary_string.<locals>._all_is_number  s6     	 	DdGN33 uutr   c                    dt          | t          t          f          r |           rgS fd| D             S )Nfloat32c                (    g | ]} |          S r   r   )r:   r6   _build_dtypesdtypes     r   r<   z9summary_string.<locals>._build_dtypes.<locals>.<listcomp>  s%    @@@MM!U++@@@r   r$   )r   r\   rW   r[   s    `r   r[   z%summary_string.<locals>._build_dtypes  s[    =Ej4-00 	A^^J5O5O 	A7N@@@@@Z@@@@r   r-    c                    t          | t          j        j        t          j        j        j        j        f          rt          | j                  S t          | t          t          f          rfd| D             S d S )Nc                &    g | ]} |          S r   r   )r:   xx_get_shape_from_tensors     r   r<   zBsummary_string.<locals>._get_shape_from_tensor.<locals>.<listcomp>  s%    ;;;2**2..;;;r   )
r%   r=   rA   rC   coreeagerr   r&   r(   r'   )rM   ra   s    r   ra   z.summary_string.<locals>._get_shape_from_tensor  sr    a&+.0@0F0MNOO 	<== D%=)) 	<;;;;;;;;	< 	<r   c                    t          | t          t          f          rfd| D             }n't          | d          rt          | j                  }ng }|S )Nc                &    g | ]} |          S r   r   )r:   o_get_output_shapes     r   r<   z=summary_string.<locals>._get_output_shape.<locals>.<listcomp>  s%    AAAQ--a00AAAr   r(   )r%   r&   r'   hasattrr(   )outputoutput_shaperg   s     r   rg   z)summary_string.<locals>._get_output_shape  sb    ftUm,, 	AAAA&AAALLVW%% 	--LLLr   c                p   fd}t          | t          j                  sPt          | t          j                  s6| k    rdk     r*                    |                     |                     d S t          | d          r1| j        r,                    |                     |                     d S d S d S )Nc                R   t          | j                                      d          d                             d          d         }	 t          | j                            d          d                   }n#  t                    }Y nxY w| d|dz    }t                      |<   	  |          |         d<   n&#  t          j        d	           g |         d<   Y nxY w	  |          |         d
<   n)#  t          j        d           |         d
          Y nxY wd}t          j
                    r| j        }n|                                 }d|         d<   d}|                                D ]\  }	}
|t          j        |
j                  z  }	 t#          | |	          j        rPt#          | |	          j        s;|         dxx         t          j        |
j                  z  cc<   d|         d<   d}n|sd|         d<   #  d|         d<   Y xY w||         d<   d S )N.r,   'r   _-r-   input_shapez Get layer {} input shape failed!rj   z!Get layer {} output shape failed!r   FT	trainable	nb_params)str	__class__splitr   
_full_namer/   r   rF   rG   r=   rE   _parameters
state_dictrV   npprodr(   getattrrr   stop_gradient)layerr   ri   
class_name	layer_idxm_keyparamslayer_state_dicttrainable_flagkvrg   ra   rS   s              r   hookz3summary_string.<locals>.register_hook.<locals>.hook  su   U_--33C88<BB3GGJJ) 0 6 6s ; ;B ?@@		)LL			!33IM33E(]]GEN30F0Fu0M0M}--3@AAA02}---/1B1B61J1J~../ABBB~....F%'' 6#(#4  #(#3#3#5#5 12GEN-."N(..00 7 71"'!'***
7q))3 <#E1--;<  '9:::bgag>N>NN:::6:{3)-+ <6;{3726GEN;///*0GEN;'''s1   	-A7 7B
)B> >!C!%C: :$D A2H

Hr-   could_use_cudnn)r%   r   
Sequential	LayerListr3   register_forward_post_hookrh   r   )r~   r   rg   ra   depthhooksmodelrS   s     r   register_hookz%summary_string.<locals>.register_hook  s    /	1 /	1 /	1 /	1 /	1 /	1 /	1d 5"-00	Aubl33	A unnLL99$??@@@@@U-.. 	A53H 	ALL99$??@@@@@	A 	A 	A 	Ar   c                @   t          | t          t          f          rf |           r[t          |t          t          f          r	|d         }n|}t          j        t          j        t          |                     |          S fdt          | |          D             S )Nr   c                .    g | ]\  }} ||          S r   r   )r:   r6   r\   build_inputs      r   r<   z7summary_string.<locals>.build_input.<locals>.<listcomp>  s6       *2!UAu%%  r   )r%   r&   r'   r=   castrandzip)r   r   r\   rW   r   s      r   r   z#summary_string.<locals>.build_input  s    j4-00 		^^J5O5O 		&4-00 q	;v{4
+;+;<<eDDD   69*f6M6M   r   c                X   dddddd}| D ]_}|d         t          t          | |         d                             k     r+t          t          | |         d                             |d<   |d         t          t          | |         d                             k     r+t          t          | |         d                             |d<   |d	         t          t          |                    k     rt          t          |                    |d	<   |d
         t          t          | |         d                             k     r+t          t          | |         d                             |d
<   ad}|                                D ]\  }}|dk    r||z  }|d         |dz   k     r|dz   |d<   |S )N      K   )layer_widthinput_shape_widthoutput_shape_widthparams_widthtable_widthr   rj   r   rq   r   r   rs   r   r      )r/   rt   rV   )rS   head_lengthr~   _temp_widthr   r   s         r   _get_str_lengthz'summary_string.<locals>._get_str_length(  s   !#"$
 
  	 	E/03GEN>2334 4   58~6775 501 ./#GEN=1223 3   47}5664 4/0 =)CE

OO;;-0U__M*>*SGEN;/00. .   /2{344/ /N+ %%'' 	! 	!DAqM!!q }%a77)4qK&r   rp   r   
z{:^{}} {:^{}} {:^{}} {:^{}}zLayer (type)r   zInput Shaper   zOutput Shaper   zParam #r   =r   rq   rj   z{:,}rs   r,   )axisrr   r   c                    t          | t          t          f          r3 |           r(t          t	          j        |           dz  dz            nt          fd| D                       S )N      @      0Ac                (    g | ]} |          S r   r   )r:   r6   _get_input_sizesizes     r   r<   z;summary_string.<locals>._get_input_size.<locals>.<listcomp>  s%    EEEQ400EEEr   )r%   r&   r'   absrz   r{   sum)r   r   rW   r   s    `r   r   z'summary_string.<locals>._get_input_size  sz    j4-00 	G^^J5O5O 	Grwz**S0I>??DDEEEEE*EEEFFDr   g       @r   r   zTotal params: ,zTrainable params: zNon-trainable params: zInput size (MB): z0.2fz!Forward/backward pass size (MB): zParams size (MB): zEstimated Total Size (MB): )r   r   )r%   r&   r'   r/   	sublayersr   applyremoveformatrt   rz   r   r{   r   )r   r   r   r   
batch_sizesummary_strr   rM   hr   r   line_newr   total_outputr   
max_lengthr~   rj   total_input_sizetotal_output_sizetotal_params_size
total_sizerW   r[   r   rg   ra   r   r   r   rS   s   `                     @@@@@@@@@r   rJ   rJ     s     A A A A A A ftUm,, 3z622JKU__&&''((E< < < < <    :A :A :A :A :A :A :A :A :A :Ax *e$$ " \

 
 
 
 
 
 mmGE	KKaK
F++q		   	



' ' 'R "/'**K3]33d::K,33M"'(()N#	 	H 8d?"K3]33d::KLLJ ' '077&}-..+,~.//,-MM'%.566'	
 	
 	{33	GBF~6R@@@  LL	G '~ > G Grw|"'E'E'E F FFG G '%.((u~k* G GEN3E$FF x$&      'z155lS I.  L3.)<=="%669IIJ3]33d::K4L444t;;K<(8<<<tCCKD0@!@DDDtKK 3]33d::K>'7>>>EEKD,=DDDtKK @(9@@@4GGKBBBBTIIK3]33d::K $,   s   7I>J)NNN)
r   r   r   r   r   r   r   r   r    r   )
__future__r   r1   rF   collectionsr   typingr   numpyrz   typing_extensionsr   r=   r   r   paddle.autogradr	   paddle.staticr
   collections.abcr   __all__r   rS   rJ   r   r   r   <module>r      s[   # " " " " "   # # # # # #                 ' ' ' ' ' '          # # # # # # # # # # # # )((((((
    9    	)-BFw w w w wt 	} } } } } }r   