
    Αik                        S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKr	S SK
Jr  S SKrS SKJrJr  S SKJr  S SKJr  \(       a  S S	KJr  / r " S
 S\5      r   S         SS jjr\" 5       SS j5       rg)    )annotationsN)OrderedDict)TYPE_CHECKING)	TypedDict)Tensornn)no_grad)	InputSpec)Sequencec                  *    \ rS rSr% S\S'   S\S'   Srg)ModelSummary$   inttotal_paramstrainable_params N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r       Y/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/hapi/model_summary.pyr   r   $   s    r   r   c                  ^^^ Uc  Uc  [        S5      eUGc)  UGb%  [        R                  " U5      (       a  [        UR                  5      nO[        U[        [        45      (       a0  / nU H'  nUR                  [        UR                  5      5        M)     O[        U[        5      (       a@  / nUR                  5        H)  nUR                  [        X5   R                  5      5        M+     OT[        U[        R                  R                  R                  5      (       a  [        UR                  5      nO[        S5      e[        U[        5      (       a  [        UR                  5      nO[        U[        5      (       a  / nU H  n[        U[        5      (       a  U4n[        U[        [        45      (       d   S[        U5       35       e[        U[        5      (       a&  UR                  [        UR                  5      5        M  UR                  U5        M     O[        U[        5      (       a  U4nOUn[        R                   " 5       (       d  ["        R$                  " S5        SnOU R&                  nU(       a  U R)                  5         S mS mUUU4S jmT" U5      n[+        XX#5      u  p[-        U	5        U(       a  U R/                  5         U
$ )	aP3  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}
z4input_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                P    U  H   n[        U[        [        45      (       d  M     g   gNFT
isinstancelisttuple)shapeitems     r   	_is_shapesummary.<locals>._is_shapex  s%    D$u..  r   c                *   Sn/ n[        [        U 5      5       Hm  nX   nUb  US:X  a  US-  nUS:  a  [        S5      eSnO3[        U[        R
                  5      (       a  US::  a  [        SU 35      eUR                  U5        Mo     [        U5      $ )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_shapesummary.<locals>._check_shape~  s    	s5z"A8D|trzq ?$Y  D'..1119$TUYTZ[  T" # Yr   c                   > [        U [        [        45      (       a  T" U 5      (       a  T" U 5      $ U  Vs/ s H  nT" U5      PM     sn$ s  snf Nr   )
input_sizer1   _check_inputr2   r$   s     r   r7   summary.<locals>._check_input  sE    j4-00Yz5J5J
++-78ZLOZ888   A)r+   paddle	is_tensorr!   r"   r   r    r.   dictkeysbase	frameworkVariabler
   r   typein_dynamic_modewarningswarntrainingevalsummary_stringprinttrain)netr6   dtypesinputxkey_input_sizer#   in_train_moderesultparams_infor7   r2   r$   s              @@@r   summaryrS   )   sC   t emOPPe/E""u{{+Je}--J!!%.1 t$$Jzz|!!%
(8(8"9: $v{{44==>>u{{+Ju  *i((J,,-	J	%	%D$$$wdUI$677 HHLT
|U7
 $	**""5#45""4(  
J	$	$!m !!##h	
 
 (9 {+K(6IF	&M		r   c                  ^ ^^^^^^^^^ S mUU4S jm[        U[        [        45      (       d  T" X5      nSnSn[        [        T R	                  5       5      5      mU4S jmU4S jmUUUUU U4S jn[        U[        5      (       a  U/nUU4S jm[        5       m/ mT R                  U5        Ub  UnT " U5        OT" X5      nT " U6   T H  nUR                  5         M     S	 n	U	" T5      n
US
U
S   -  S-   -  nSR                  SU
S   SU
S   SU
S   SU
S   5      nX[S-   -  nUSU
S   -  S-   -  nSnSnSnSnT H  nSR                  UU
S   [        TU   S   5      U
S   [        TU   S   5      U
S   SR                  TU   S   5      U
S   5      nUTU   S   -  n U[        R                  " [        R                  " TU   S   SS95      -  nSTU   ;   a  TU   S   (       a  UTU   S   -  nX[S-   -  nM     UU4S  jmT" US5      n[        S!U-  S"-  S#-  5      n[        US"-  S#-  5      nUU-   U-   nUSU
S   -  S-   -  nUS$US% 3S-   -  nUS&US% 3S-   -  nUS'X-
  S% 3S-   -  nUS
U
S   -  S-   -  nUS(US) 3S-   -  nUS*US) 3S-   -  nUS+US) 3S-   -  nUS,US) 3S-   -  nUS
U
S   -  S-   -  nUUUS-.4$ !   TU   S    H/  nU[        R                  " [        R                  " USS95      -  nM1      GN0= f).Nc                X    U  H$  n[        U[        R                  5      (       a  M$    g   gr   )r   r,   r-   )itemsr#   s     r   _all_is_number&summary_string.<locals>._all_is_number  s%    DdGNN33  r   c                   > Uc  Sn[        U [        [        45      (       a  T" U 5      (       a  U/$ U  Vs/ s H  nT" X!5      PM     sn$ s  snf )Nfloat32r   )r6   dtyper1   rW   _build_dtypess      r   r\   %summary_string.<locals>._build_dtypes  sL    =Ej4-00^J5O5O7N5?@ZM!+Z@@@r9   r(    c                P  > [        U [        R                  R                  [        R                  R                  R
                  R                  45      (       a  [        U R                  5      $ [        U [        [        45      (       a  U  Vs/ s H  nT" U5      PM     sn$ g s  snf r5   )
r   r:   r>   r@   coreeagerr   r    r"   r!   )rM   xx_get_shape_from_tensors     r   rc   .summary_string.<locals>._get_shape_from_tensor  sw    a&++..0@0@0F0F0M0MNOO= D%=))9:;2*2.;; *;s   B#c                   > [        U [        [        45      (       a  U  Vs/ s H  nT" U5      PM     nnU$ [        U S5      (       a  [        U R                  5      nU$ / nU$ s  snf )Nr"   )r   r    r!   hasattrr"   )outputooutput_shape_get_output_shapes      r   rj   )summary_string.<locals>._get_output_shape  sn    ftUm,,:@A&Q-a0&LA
 	 VW%%-L  L Bs   A#c                t  > UUU4S jn[        U [        R                  5      (       dL  [        U [        R                  5      (       d-  U T:X  a  TS:  a!  TR	                  U R                  U5      5        g [        U S5      (       a3  U R                  (       a!  TR	                  U R                  U5      5        g g g )Nc                   > [        U R                  5      R                  S5      S   R                  S5      S   n [        U R                  R                  S5      S   5      nU SUS-    3n[        5       TU'    T" U5      TU   S'    T" U5      TU   S
'   Sn[        R                  " 5       (       a  U R                  nOU R                  5       nSTU   S'   SnUR                  5        H  u  pU[        R                  " U
R                   5      -  n [#        X	5      R$                  (       aT  [#        X	5      R&                  (       d:  TU   S==   [        R                  " U
R                   5      -  ss'   STU   S'   SnM  U(       d
  STU   S'   M  M     UTU   S'   g !   [        T5      n GNM= f!   [        R                  " S	5        / TU   S'    GNM= f!   [        R                  " S5        TU   S
      GNd= f!   STU   S'    GM"  = f)N.r'   'r   _-r(   input_shapez Get layer {} input shape failed!ri   z!Get layer {} output shape failed!r   FT	trainable	nb_params)str	__class__splitr   
_full_namer*   r   rC   rD   r:   rB   _parameters
state_dictrV   npprodr"   getattrrs   stop_gradient)layerrL   rg   
class_name	layer_idxm_keyparamslayer_state_dicttrainable_flagkvrj   rc   rS   s              r   hook3summary_string.<locals>.register_hook.<locals>.hook  s   U__-33C8<BB3GJJ) 0 0 6 6s ;B ?@	 "l!IM?3E(]GEN30Fu0M}-
/1B61J~.
 F%%''#(#4#4 #(#3#3#5 12GEN-."N(..0"''!''**
7)33#E-;;'9:bggagg>NN:6:{3)-+6;{3 , 1 +1GEN;'U)L	3@A02}-/AB~..726GEN;/s6   'F  ;F3 
G A,G?G? F03 G G<?
Hr(   could_use_cudnn)r   r   
Sequential	LayerListr.   register_forward_post_hookrf   r   )r   r   rj   rc   depthhooksmodelrS   s     r   register_hook%summary_string.<locals>.register_hook  s    /	1d 5"--00ubll33unLL99$?@U-..53H3HLL99$?@ 4I.r   c                Z  > [        U [        [        45      (       ad  T" U 5      (       aW  [        U[        [        45      (       a  US   nOUn[        R                  " [        R
                  " [        U 5      5      U5      $ [        X5       VVs/ s H  u  p2T" X25      PM     snn$ s  snnf )Nr   )r   r    r!   r:   castrandzip)r6   rK   r[   r1   rW   build_inputs       r   r   #summary_string.<locals>.build_input  s    j4-00^J5O5O&4-00q	;;v{{4
+;<eDD 7:*6M6M(!A%6M  s   B'c                n   SSSSSS.nU  H  nUS   [        [        X   S   5      5      :  a  [        [        X   S   5      5      US'   US   [        [        X   S   5      5      :  a  [        [        X   S   5      5      US'   US	   [        [        U5      5      :  a  [        [        U5      5      US	'   US
   [        [        X   S   5      5      :  d  M  [        [        X   S   5      5      US
'   M     SnUR                  5        H  u  pEUS:w  d  M  X5-  nM     US   US-   :  a  US-   US'   U$ )N      K   )layer_widthinput_shape_widthoutput_shape_widthparams_widthtable_widthr   ri   r   rr   r   r   rt   r   r      )r*   ru   rV   )rS   head_lengthr   _temp_widthr   r   s         r   _get_str_length'summary_string.<locals>._get_str_length(  so   !#"$
 E/03GN>234  58~67501 ./#GN=123  47}564/0 =)CE
O;-0U_M*>*SGN;/0.  /2{34/N+% , %%'DAM!  ( }%a7)4qK&r   rq   r   
z{:^{}} {:^{}} {:^{}} {:^{}}zLayer (type)r   zInput Shaper   zOutput Shaper   zParam #r   =r   rr   ri   z{:,}rt   r'   )axisrs   r   c           	        > [        U [        [        45      (       a4  T" U 5      (       a'  [        [        R
                  " U 5      S-  S-  5      nU$ [        U  Vs/ s H  nT" X!5      PM     sn5      nU$ s  snf )N      @      0A)r   r    r!   absr{   r|   sum)r6   sizer1   rW   _get_input_sizes      r   r   'summary_string.<locals>._get_input_size  sm    j4-00^J5O5Orwwz*S0I>?D  *E*Q0*EFD Fs   A5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formatru   r{   r   r|   r   )r   r6   rK   rL   
batch_sizesummary_strr   rM   hr   r   line_newr   total_outputr   
max_lengthr   ri   total_input_sizetotal_output_sizetotal_params_size
total_sizerW   r\   r   rj   rc   r   r   r   rS   s   `                     @@@@@@@@@r   rG   rG     s)   A ftUm,,z2JKU__&'(E<:A :Ax *e$$ \

 mGE	KKa
+q	 	
 'R "'*K3]33d::K,33M"'(()N#	H d?"K3]33d::KLLJ077&}-.+,~./,-MM'%.56'	
 	{33	GBFF~6R@ L '%.(u~k* GEN3E$FF $&3 6 'z15lS I. L3.)<="%669IIJ3]33d::K^L#34t;;K'(8';<tCCK
 !@ CDtKK 3]33d::K&'7&=>EEK
+,=d+CDtKK '(9$'?@4GGK0D0ABTIIK3]33d::K $,  Q	G '~ >rww|"'E FF !?s   '2K		=L	)NNN)
rJ   znn.Layerr6   zLint | tuple[int, ...] | InputSpec | list[tuple[int, ...] | InputSpec] | NonerK   zstr | Sequence[str] | NonerL   z4Tensor | Sequence[Tensor] | dict[str, Tensor] | Nonereturnr   )
__future__r   r,   rC   collectionsr   typingr   numpyr{   typing_extensionsr   r:   r   r   paddle.autogradr	   paddle.staticr
   collections.abcr   __all__r   rS   rG   r   r   r   <module>r      s    #   #    '   # #(
9  	)-BFw	w	w 'w @w wt 	} }r   