
    ёiXl                       S SK Jr  S SKrS SKJr  S SKJrJrJrJ	r	  S SK
Jr  S SKJr  S SKJr  S SKrS SKJr  S	S
KJr  S	SKJr  SSKJr  / rS SKJr   " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rg)    )annotationsN)OrderedDict)IterableIteratorMappingSequence)chain)Any)Self)Tensor   )param_guard)	Parameter   )Layer)param_one_aliasc                     ^  \ rS rSrSr\" SS/5       S   SU 4S jjj5       rSS jrSS jrSS jr	SS	 jr
SS
 jrSS jrSS jrSS jrSS jrSS jrSS jr\" SS/5          SS j5       rSrU =r$ ) 	LayerDict'   a  
LayerDict holds sublayers in the ordered dictionary, and sublayers it contains are properly registered.
Held sublayers can be accessed like a regular ordered python dictionary.

Parameters:
    sublayers (LayerDict|OrderedDict|list[(key,Layer)...], optional): iterable of key/value pairs, the type of value is 'paddle.nn.Layer' .

Examples:
    .. code-block:: python

        >>> import paddle
        >>> import numpy as np
        >>> from collections import OrderedDict

        >>> sublayers = OrderedDict([
        ...     ('conv1d', paddle.nn.Conv1D(3, 2, 3)),
        ...     ('conv2d', paddle.nn.Conv2D(3, 2, 3)),
        ...     ('conv3d', paddle.nn.Conv3D(4, 6, (3, 3, 3))),
        >>> ])

        >>> layers_dict = paddle.nn.LayerDict(sublayers=sublayers)

        >>> l = layers_dict['conv1d']

        >>> for k in layers_dict:
        ...     l = layers_dict[k]
        ...
        >>> print(len(layers_dict))
        3

        >>> del layers_dict['conv2d']
        >>> print(len(layers_dict))
        2

        >>> conv1d = layers_dict.pop('conv1d')
        >>> print(len(layers_dict))
        1

        >>> layers_dict.clear()
        >>> print(len(layers_dict))
        0

	sublayersmodulesc                L   > [         TU ]  5         Ub  U R                  U5        g g Nsuper__init__update)selfr   	__class__s     Y/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/nn/layer/container.pyr   LayerDict.__init__T   s'     	 KK	" !    c                     U R                   U   $ r   _sub_layersr   keys     r    __getitem__LayerDict.__getitem__b   s    $$r"   c                $    U R                  X5      $ r   )add_sublayer)r   r'   sublayers      r    __setitem__LayerDict.__setitem__e   s      //r"   c                    U R                   U	 g r   r$   r&   s     r    __delitem__LayerDict.__delitem__h   s    S!r"   c                ,    [        U R                  5      $ r   lenr%   r   s    r    __len__LayerDict.__len__k       4##$$r"   c                ,    [        U R                  5      $ r   )iterr%   r5   s    r    __iter__LayerDict.__iter__n       D$$%%r"   c                    XR                   ;   $ r   r$   r&   s     r    __contains__LayerDict.__contains__q   s    &&&&r"   c                8    U R                   R                  5         g)aF  
Clear all the sublayers in the LayerDict.

Parameters:
    None.

Examples:
    .. code-block:: python

        >>> import paddle
        >>> from collections import OrderedDict

        >>> sublayers = OrderedDict([
        ...     ('conv1d', paddle.nn.Conv1D(3, 2, 3)),
        ...     ('conv2d', paddle.nn.Conv2D(3, 2, 3)),
        ...     ('conv3d', paddle.nn.Conv3D(4, 6, (3, 3, 3))),
        >>> ])

        >>> layer_dict = paddle.nn.LayerDict(sublayers=sublayers)
        >>> len(layer_dict)
        3

        >>> layer_dict.clear()
        >>> len(layer_dict)
        0

N)r%   clearr5   s    r    rB   LayerDict.cleart   s    8 	 r"   c                    X   nX	 U$ )a  
Remove the key from the LayerDict and return the layer of the key.

Parameters:
    key (str): the key to be removed.

Examples:
    .. code-block:: python

        >>> import paddle
        >>> from collections import OrderedDict

        >>> sublayers = OrderedDict([
        ...     ('conv1d', paddle.nn.Conv1D(3, 2, 3)),
        ...     ('conv2d', paddle.nn.Conv2D(3, 2, 3)),
        ...     ('conv3d', paddle.nn.Conv3D(4, 6, (3, 3, 3))),
        >>> ])

        >>> layer_dict = paddle.nn.LayerDict(sublayers=sublayers)
        >>> len(layer_dict)
        3

        >>> layer_dict.pop('conv2d')
        >>> len(layer_dict)
        2

 r   r'   vs      r    popLayerDict.pop   s    8 IIr"   c                6    U R                   R                  5       $ )aL  
Return the iterable of the keys in LayerDict.

Parameters:
    None.

Examples:
    .. code-block:: python

        >>> import paddle
        >>> from collections import OrderedDict

        >>> sublayers = OrderedDict([
        ...     ('conv1d', paddle.nn.Conv1D(3, 2, 3)),
        ...     ('conv2d', paddle.nn.Conv2D(3, 2, 3)),
        ...     ('conv3d', paddle.nn.Conv3D(4, 6, (3, 3, 3))),
        >>> ])

        >>> layer_dict = paddle.nn.LayerDict(sublayers=sublayers)
        >>> for k in layer_dict.keys():
        ...     print(k)
        conv1d
        conv2d
        conv3d

)r%   keysr5   s    r    rK   LayerDict.keys   s    6 $$&&r"   c                6    U R                   R                  5       $ )a  
Return the iterable of the key/value pairs in LayerDict.

Parameters:
    None.

Examples:
    .. code-block:: python

        >>> import paddle
        >>> from collections import OrderedDict

        >>> sublayers = OrderedDict([
        ...     ('conv1d', paddle.nn.Conv1D(3, 2, 3)),
        ...     ('conv2d', paddle.nn.Conv2D(3, 2, 3)),
        ...     ('conv3d', paddle.nn.Conv3D(4, 6, (3, 3, 3))),
        >>> ])

        >>> layer_dict = paddle.nn.LayerDict(sublayers=sublayers)
        >>> for k, v in layer_dict.items():
        ...     print(f"{k}:", v)
        conv1d : Conv1D(3, 2, kernel_size=[3], data_format=NCL)
        conv2d : Conv2D(3, 2, kernel_size=[3, 3], data_format=NCHW)
        conv3d : Conv3D(4, 6, kernel_size=[3, 3, 3], data_format=NCDHW)

)r%   itemsr5   s    r    rN   LayerDict.items   s    6 %%''r"   c                6    U R                   R                  5       $ )a  
Return the iterable of the values in LayerDict.

Parameters:
    None.

Examples:
    .. code-block:: python

        >>> import paddle
        >>> from collections import OrderedDict

        >>> sublayers = OrderedDict([
        ...     ('conv1d', paddle.nn.Conv1D(3, 2, 3)),
        ...     ('conv2d', paddle.nn.Conv2D(3, 2, 3)),
        ...     ('conv3d', paddle.nn.Conv3D(4, 6, (3, 3, 3))),
        >>> ])

        >>> layer_dict = paddle.nn.LayerDict(sublayers=sublayers)
        >>> for v in layer_dict.values():
        ...     print(v)
        Conv1D(3, 2, kernel_size=[3], data_format=NCL)
        Conv2D(3, 2, kernel_size=[3, 3], data_format=NCHW)
        Conv3D(4, 6, kernel_size=[3, 3, 3], data_format=NCDHW)

r%   valuesr5   s    r    rR   LayerDict.values   s    6 &&((r"   c           	        [        U[        5      (       d   S[        U5      R                  -   5       e[        U[        [
        [        45      (       a+  UR                  5        H  u  p#U R                  X#5        M     g[        U5       H^  u  pE[        U5      S:w  a2  [        S[        U5      -   S-   [        [        U5      5      -   S-   5      eU R                  US   US   5        M`     g)	a}  
Update the key/values pairs in sublayers to the LayerDict, overwriting the existing keys.

Parameters:
    sublayers (LayerDict|OrderedDict|list[(key,Layer)...]): iterable of key/value pairs, the type of value is 'paddle.nn.Layer' .

Examples:
    .. code-block:: python

        >>> import paddle
        >>> from collections import OrderedDict

        >>> sublayers = OrderedDict([
        ...     ('conv1d', paddle.nn.Conv1D(3, 2, 3)),
        ...     ('conv2d', paddle.nn.Conv2D(3, 2, 3)),
        ...     ('conv3d', paddle.nn.Conv3D(4, 6, (3, 3, 3))),
        >>> ])

        >>> new_sublayers = OrderedDict([
        ...     ('relu', paddle.nn.ReLU()),
        ...     ('conv2d', paddle.nn.Conv2D(4, 2, 4)),
        >>> ])
        >>> layer_dict = paddle.nn.LayerDict(sublayers=sublayers)

        >>> layer_dict.update(new_sublayers)

        >>> for k, v in layer_dict.items():
        ...     print(f"{k}:", v)
        conv1d : Conv1D(3, 2, kernel_size=[3], data_format=NCL)
        conv2d : Conv2D(4, 2, kernel_size=[4, 4], data_format=NCHW)
        conv3d : Conv3D(4, 6, kernel_size=[3, 3, 3], data_format=NCDHW)
        relu : ReLU()

zSThe type of sublayers is not iterable of key/value pairs, the type of sublayers is    The length of the z's element in sublayers is , which must be 2.r   r   N)
isinstancer   type__name__r   r   r   rN   r+   	enumerater4   
ValueErrorstr)r   r   r'   layerikvs         r    r   LayerDict.update	  s    T )X.. 	
a9o&&'	
.
 i+y'!BCC'oo/
!!#- 0 #9-r7a<$,a&!78 c"g,' /	/  !!"Q%A/ .r"   rE   r   )r   zKLayerDict | typing.Mapping[str, Layer] | Sequence[tuple[str, Layer]] | NonereturnNone)r'   r]   rb   r   )r'   r]   r,   r   rb   r   )r'   r]   rb   rc   rb   intrb   zIterator[str])r'   r]   rb   bool)rb   rc   )rb   zIterable[str])rb   zIterable[tuple[str, Layer]])rb   Iterable[Layer])r   zDLayerDict | typing.Mapping[str, Layer] | Sequence[tuple[str, Layer]]rb   rc   )rZ   
__module____qualname____firstlineno____doc__r   r   r(   r-   r0   r6   r;   r?   rB   rH   rK   rN   rR   r   __static_attributes____classcell__r   s   @r    r   r   '   s    *X k9-. ## 
# /#%0"%&'!<@':(:): k9-.<0 Q<0
 
<0 /<0r"   r   c                  v   ^  \ rS rSrSr S
   SU 4S jjjrSS jrSS jrSS jrSS jr	    SS jr
S	rU =r$ )ParameterDictiI  a  
Holds parameters in a dictionary.

ParameterDict can be indexed like a regular Python dictionary, but Parameters it contains are properly registered.

Parameters:
    parameters (iterable, optional): a mapping (dictionary) of (string : Any) or an iterable of key-value pairs of type (string, Any)

Examples:
    .. code-block:: pycon

        >>> import paddle

        >>> class MyLayer(paddle.nn.Layer):
        ...     def __init__(self, num_stacked_param):
        ...         super().__init__()
        ...         # create ParameterDict with iterable Parameters
        ...         self.params = paddle.nn.ParameterDict(
        ...             {f"t{i}": paddle.create_parameter(shape=[2, 2], dtype='float32') for i in range(num_stacked_param)}
        ...         )
        ...
        ...     def forward(self, x):
        ...         for i, key in enumerate(self.params):
        ...             x = paddle.matmul(x, self.params[key])
        ...         return x
        >>> x = paddle.uniform(shape=[5, 2], dtype='float32')
        >>> num_stacked_param = 4
        >>> model = MyLayer(num_stacked_param)
        >>> print(len(model.params))
        4
        >>> res = model(x)
        >>> print(res.shape)
        paddle.Size([5, 2])

        >>> replaced_param = paddle.create_parameter(shape=[2, 3], dtype='float32')
        >>> model.params['t3'] = replaced_param  # replace t3 param
        >>> res = model(x)
        >>> print(res.shape)
        paddle.Size([5, 3])
        >>> model.params['t4'] = paddle.create_parameter(shape=[3, 4], dtype='float32')  # append param
        >>> print(len(model.params))
        5
        >>> res = model(x)
        >>> print(res.shape)
        paddle.Size([5, 4])
c                L   > [         TU ]  5         Ub  U R                  U5        g g r   r   )r   
parametersr   s     r    r   ParameterDict.__init__y  s'     	!KK
# "r"   c                    [        U R                  5         U R                  U   sS S S 5        $ ! , (       d  f       g = fr   )r   _parametersr&   s     r    r(   ParameterDict.__getitem__  s*    ))*##C( +**s   /
=c                J    [        U[        5      (       d   e[        XU5        g r   )rX   r   setattr)r   r'   params      r    r-   ParameterDict.__setitem__  s    %++++5!r"   c                ,    [        U R                  5      $ r   r4   rv   r5   s    r    r6   ParameterDict.__len__  r8   r"   c                ,    [        U R                  5      $ r   )r:   rv   r5   s    r    r;   ParameterDict.__iter__  r=   r"   c           	        [        U[        5      (       d   S[        U5      R                  -   5       e[        U[        [
        [        45      (       a+  UR                  5        H  u  p#U R                  X#5        M     g[        U5       HG  u  pE[        U5      S:w  a  [        SU S[        U5       S35      eU R                  US   US   5        MI     g)	znUpdate a given parameter at the end of the dict.

Parameters:
    parameters (Parameter): parameter to update
zTThe type of parameters is not iterable of key/value pairs, the type of sublayers is rU   rV   z's element in parameters is rW   r   r   N)rX   r   rY   rZ   r   rq   r   rN   add_parameterr[   r4   r\   )r   rs   r'   	parameterr_   r`   s         r    r   ParameterDict.update  s     *h// 	
b:''(	
/
 j;w"GHH","2"2"4""32 #5 #:.r7a<$,QC/KCPRG9Tfg  ""2a5"Q%0 /r"   rE   r   )rs   zJParameterDict | Mapping[str, Tensor] | Sequence[tuple[str, Tensor]] | Nonerb   rc   )r'   r]   rb   r   )r'   r]   rz   r   rb   rc   rd   rf   )rs   zCParameterDict | Mapping[str, Tensor] | Sequence[tuple[str, Tensor]]rb   rc   )rZ   ri   rj   rk   rl   r   r(   r-   r6   r;   r   rm   rn   ro   s   @r    rq   rq   I  s_    -l $$ 
$ $)"%&1 P1
 
1 1r"   rq   c                  f   ^  \ rS rSrSrS
SU 4S jjjrSS jrSS jrSS jrSS jr	SS jr
S	rU =r$ )ParameterListi  a8  ParameterList Container.

This container acts like a Python list, but parameters it contains will be properly added.

Parameters:
    parameters (iterable, optional): Iterable Parameters to be added.

Examples:
    .. code-block:: pycon

        >>> import paddle

        >>> class MyLayer(paddle.nn.Layer):
        ...     def __init__(self, num_stacked_param):
        ...         super().__init__()
        ...         # create ParameterList with iterable Parameters
        ...         self.params = paddle.nn.ParameterList(
        ...             [paddle.create_parameter(shape=[2, 2], dtype='float32') for _ in range(num_stacked_param)]
        ...         )
        ...
        ...     def forward(self, x):
        ...         for i, p in enumerate(self.params):
        ...             x = paddle.matmul(x, p)
        ...         return x
        >>> x = paddle.uniform(shape=[5, 2], dtype='float32')
        >>> num_stacked_param = 4
        >>> model = MyLayer(num_stacked_param)
        >>> print(len(model.params))
        4
        >>> res = model(x)
        >>> print(res.shape)
        paddle.Size([5, 2])
        >>> replaced_param = paddle.create_parameter(shape=[2, 3], dtype='float32')
        >>> model.params[num_stacked_param - 1] = replaced_param
        >>> res = model(x)
        >>> print(res.shape)
        paddle.Size([5, 3])
        >>> model.params.append(paddle.create_parameter(shape=[3, 4], dtype='float32'))  # append param
        >>> print(len(model.params))
        5
        >>> res = model(x)
        >>> print(res.shape)
        paddle.Size([5, 4])
c                   > [         TU ]  5         UbG  [        U5       H7  u  p#[        U[        5      (       d   eU R                  [        U5      U5        M9     g g r   )r   r   r[   rX   r   r   r]   )r   rs   idxrz   r   s       r    r   ParameterList.__init__  sQ    !'
3
!%3333""3s8U3 4 "r"   c                    [        U R                  5         U R                  [        U5         sS S S 5        $ ! , (       d  f       g = fr   )r   rv   r]   r   r   s     r    r(   ParameterList.__getitem__  s.    ))*##CH- +**s	   8
Ac           	         [        U[        [        45      (       d  [        S[	        U5       35      e[
        R                  " U[        U [        U5      5      5        g )Nz6param should be 'Parameter' or 'Tensor', but received )	rX   r   r   	TypeErrorrY   paddleassigngetattrr]   )r   r   rz   s      r    r-   ParameterList.__setitem__  sJ    %)V!455HeV  	eWT3s845r"   c                ,    [        U R                  5      $ r   r}   r5   s    r    r6   ParameterList.__len__  r8   r"   c                    [        U R                  5         [        U R                  R                  5       5      sS S S 5        $ ! , (       d  f       g = fr   )r   rv   r:   rR   r5   s    r    r;   ParameterList.__iter__  s3    ))*((//12 +**s   #A
Ac                f    [        U R                  5      nU R                  [        U5      U5        U $ )znAppends a given parameter at the end of the list.

Parameters:
    parameter (Parameter): parameter to append
)r4   rv   r   r]   )r   r   r   s      r    appendParameterList.append  s-     $""#3s8Y/r"   rE   r   )rs   zIterable[Tensor] | Nonerb   rc   )r   re   rb   r   )r   re   rz   r   rb   rc   rd   )rb   zIterator[Tensor])r   r   rb   r   )rZ   ri   rj   rk   rl   r   r(   r-   r6   r;   r   rm   rn   ro   s   @r    r   r     s1    +Z4 4.6%3 r"   r   c                  *  ^  \ rS rSrSr\" SS/5      SSU 4S jjj5       rSS jrS rSS jr	SS
 jr
SS jrSS jrSS jrSS jrS S jrS!U 4S jjr\" S	S/5      S"S j5       r\" S	S/5      S#S j5       r\" SS/5      S$S j5       rS%S jrSrU =r$ )&	LayerListi  a!  
LayerList holds sublayers, and sublayers it contains are properly registered.
held sublayers can be indexed like a regular python list.

Parameters:
    sublayers (iterable of Layer, optional): sublayers to hold

Examples:
    .. code-block:: python

        >>> import paddle

        >>> class MyLayer(paddle.nn.Layer):
        ...     def __init__(self):
        ...         super().__init__()
        ...         self.linears = paddle.nn.LayerList(
        ...             [paddle.nn.Linear(10, 10) for i in range(10)])
        ...
        ...     def forward(self, x):
        ...         # LayerList can act as an iterable, or be indexed using ints
        ...         for i, l in enumerate(self.linears):
        ...             x = self.linears[i // 2](x) + l(x)
        ...         return x
r   r   c                   > [         TU ]  5         Ub0  [        U5       H   u  p#U R                  [	        U5      U5        M"     g g r   )r   r   r[   r+   r]   )r   r   r   r^   r   s       r    r   LayerList.__init__  s>     '	2
!!#c(E2 3 !r"   c           
         [        U[        5      (       a^  [        U 5      * Us=::  a  [        U 5      :  d*  O  [        SU S[        U 5      *  S[        U 5       S35      eUS:  a  U[        U 5      -  nU$ )Nindex z1 is out of range, should be an integer in range [, )r   )rX   re   r4   
IndexErrorr   s     r    _get_abs_idxLayerList._get_abs_idx#  s}    c3YJ#1D	1 SE!RTWX\T]S]R^^`adeiaj`kklm  Qws4y 
r"   c                6    [        U R                  U5      5      $ r   )r]   r   r   s     r    _get_abs_string_indexLayerList._get_abs_string_index-  s    4$$S)**r"   c                    [        U[        5      (       a5  U R                  [        U R                  R                  5       5      U   5      $ U R                  U5      nU R                  [        U5         $ r   )rX   slicer   listr%   rR   r   r]   r   s     r    r(   LayerList.__getitem__0  s\    c5!!>>$t'7'7'>'>'@"A#"FGG##C(C##CH--r"   r,   c                P    U R                  U5      n[        U [        U5      U5      $ r   )r   ry   r]   )r   r   r,   s      r    r-   LayerList.__setitem__7  s%    $tSXx00r"   c           	        [        U[        5      (       a>  [        [        U R                  5      5      U    H  n[        U [        U5      5        M     O&U R                  U5      n[        U [        U5      5        [        [        U R                  5      5       Vs/ s H  n[        U5      PM     nn[        [        [        X@R                  R                  5       5      5      5      U l        g s  snf r   )rX   r   ranger4   r%   delattrr]   r   r   r   ziprR   )r   r   kr_   str_indicess        r    r0   LayerList.__delitem__;  s    c5!!3t//01#6c!f% 7 ##C(CD#c(#',S1A1A-B'CD'C!s1v'CD&["2"2"9"9";<=
 Es   C,c                ,    [        U R                  5      $ r   r3   r5   s    r    r6   LayerList.__len__G  r8   r"   c                H    [        U R                  R                  5       5      $ r   r:   r%   rR   r5   s    r    r;   LayerList.__iter__J      D$$++-..r"   c                $    U R                  U5      $ r   )extend)r   r   s     r    __iadd__LayerList.__iadd__M  s    {{7##r"   c                    [        5       n[        [        X5      5       H   u  p4UR                  [	        U5      U5        M"     U$ r   )r   r[   r	   
add_moduler]   )r   othercombinedr_   modules        r    __add__LayerList.__add__P  s8    ;"5#56IAA/ 7r"   c                ~   > [         TU ]  5       nU Vs/ s H  o"R                  5       (       a  M  UPM     nnU$ s  snf r   )r   __dir__isdigit)r   rK   r'   r   s      r    r   LayerList.__dir__V  s3    w #9t;;=t9 :s   ::r   c                N    U R                  [        [        U 5      5      U5        U $ )a{  
Appends a sublayer to the end of the list.

Parameters:
    sublayer (Layer): sublayer to append

Examples:
    .. code-block:: python

        >>> import paddle

        >>> linears = paddle.nn.LayerList([paddle.nn.Linear(10, 10) for i in range(10)])
        >>> another = paddle.nn.Linear(10, 10)
        >>> linears.append(another)
        >>> print(len(linears))
        11
r+   r]   r4   )r   r,   s     r    r   LayerList.append[  s!    & 	#c$i.(3r"   c                   [        U[        5      (       a6  [        U R                  5      * Us=::  a  [        U R                  5      ::  d#  O   S[        U 5      *  S[        U 5       S35       eUS:  a  U[        U 5      -  n[	        [        U R                  5      US5       H4  nU R                  [        US-
  5         U R                  [        U5      '   M6     X R                  [        U5      '   g)aB  
Insert a sublayer before a given index in the list.

Parameters:
    index (int): index to insert.
    sublayer (Layer): sublayer to insert

Examples:
    .. code-block:: python

        >>> import paddle

        >>> linears = paddle.nn.LayerList([paddle.nn.Linear(10, 10) for i in range(10)])
        >>> another = paddle.nn.Linear(10, 10)
        >>> linears.insert(3, another)
        >>> print(linears[3] is another)
        True
        >>> another = paddle.nn.Linear(10, 10)
        >>> linears.insert(-1, another)
        >>> print(linears[-2] is another)
        True
z%index should be an integer in range [r   ]r   r   N)rX   re   r4   r%   r   r]   )r   indexr,   r_   s       r    insertLayerList.insertq  s    0 %%%3,
 +
+,$**++, 	
 4SYJ<r#d)AN	
 , 19SYEs4++,eR8A'+'7'7AE
'CDSV$ 9'/U$r"   c                    [        U 5      n[        U5       H#  u  p4[        X#-   5      nU R                  XT5        M%     U $ )a  
Appends sublayers to the end of the list.

Parameters:
    sublayers (iterable of Layer): iterable of sublayers to append

Returns:
    None

Examples:
    .. code-block:: python

        >>> import paddle

        >>> linears = paddle.nn.LayerList([paddle.nn.Linear(10, 10) for i in range(10)])
        >>> another_list = paddle.nn.LayerList([paddle.nn.Linear(10, 10) for i in range(5)])
        >>> linears.extend(another_list)
        >>> print(len(linears))
        15
        >>> print(another_list[0] is linears[10])
        True
)r4   r[   r]   r+   )r   r   offsetr_   r,   r   s         r    r   LayerList.extend  s>    0 T$Y/KAfj/Cc, 0 r"   c                    X   nX	 U$ r   rE   rF   s      r    rH   LayerList.pop  s    IIr"   r$   r   )r   zIterable[Layer] | Nonerb   rc   )r   re   rb   re   )r   re   rb   r   )r   re   r,   r   rb   rc   )r   re   rb   rc   rd   rb   zIterator[Layer])r   rh   rb   r   )r   rh   rb   r   )rb   z	list[str])r,   r   rb   r   )r   re   r,   r   rb   rc   )r   rh   rb   r   )r'   zint | slicerb   r   )rZ   ri   rj   rk   rl   r   r   r   r   r(   r-   r0   r6   r;   r   r   r   r   r   r   rH   rm   rn   ro   s   @r    r   r     s    2 k9-.3 3 /3+.1

%/$
 j(+, -* j(+,!0 -!0F k9-. /: r"   r   c                     ^  \ rS rSrSr    SU 4S jjrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSrU =r$ )
Sequentiali  a  Sequential container.
Sub layers will be added to this container in the order of argument in the constructor.
The argument passed to the constructor can be iterable Layers or iterable name Layer pairs.

Parameters:
    layers(Layer|list|tuple): Layer or list/tuple of iterable name Layer pair.

Returns:
    None.

Examples:
    .. code-block:: python

        >>> import paddle

        >>> data = paddle.uniform(shape=[30, 10], dtype='float32')
        >>> # create Sequential with iterable Layers
        >>> model1 = paddle.nn.Sequential(
        ...     paddle.nn.Linear(10, 1), paddle.nn.Linear(1, 2)
        >>> )
        >>> model1[0]  # access the first layer
        >>> res1 = model1(data)  # sequential execution

        >>> # create Sequential with name Layer pairs
        >>> model2 = paddle.nn.Sequential(
        ...     ('l1', paddle.nn.Linear(10, 2)),
        ...     ('l2', paddle.nn.Linear(2, 3))
        >>> )
        >>> model2['l1']  # access l1 layer
        >>> model2.add_sublayer('l3', paddle.nn.Linear(3, 3))  # add sublayer
        >>> res2 = model2(data)  # sequential execution

        >>> # append single layer at the end of sequential
        >>> model2 = paddle.nn.Sequential(paddle.nn.Linear(10, 20))
        >>> model2.append(paddle.nn.Linear(20, 30))
        >>> res2 = model2(data)  # [30, 30]

        >>> # insert single layer at the given position
        >>> model2 = paddle.nn.Sequential(paddle.nn.Linear(20, 30))
        >>> model2.insert(0, paddle.nn.Linear(10, 20))
        >>> res2 = model2(data)  # [30, 30]

        >>> # extend sequential with given sequence of layer(s) at the end
        >>> model2 = paddle.nn.Sequential()
        >>> model2.extend([paddle.nn.Linear(10, 20), paddle.nn.Linear(20, 30)])
        >>> res2 = model2(data)  # [30, 30]
c                  > [         TU ]  5         [        U5      S:X  aF  [        US   [        5      (       a.  US   R                  5        H  u  p#U R                  X#5        M     g [        U5      S:  a;  [        US   [        [        45      (       a  U H  u  p#U R                  X#5        M     g [        U5       H   u  pCU R                  [        U5      U5        M"     g )Nr   r   )r   r   r4   rX   r   rN   r+   r   tupler[   r]   )r   layersnamer^   r   r   s        r    r   Sequential.__init__  s     	v;!
6!9k B B%ay0!!$.  1[1_F1Ie}!E!E%!!$.  & (/
!!#c(E2 0r"   c                :   [        U[        5      (       a3  U R                  " [        U R                  R                  5       5      U   6 $ [        U[        5      (       a  U R                  U   $ U[        U R                  5      :  a  [        SU S35      eUS:  a3  U[        U R                  5      * :  a  U[        U R                  5      -  nO)U[        U R                  5      * :  a  [        SU S35      e[        U R                  R                  5       5      U   $ )Nr   z is out of ranger   )	rX   r   r   r   r%   rR   r]   r4   r   r   r   s     r    r(   Sequential.__getitem__  s    dE"">>D)9)9)@)@)B$CD$IKKc""##D))s4++,, 6$/?!@AAds4+;+;'<&<<D,,--T--... 6$/?!@AA((//12488r"   c                ^    [        U[        5      (       d   e[        U [        U5      U5        g r   )rX   r   ry   r]   )r   r   r^   s      r    r-   Sequential.__setitem__
  s%    %''''c$i'r"   c                V    [        U5      nXR                  ;   d   eU R                  U	 g r   )r]   r%   r   s     r    r0   Sequential.__delitem__  s+    4y'''''T"r"   c                ,    [        U R                  5      $ r   r3   r5   s    r    r6   Sequential.__len__  r8   r"   c                X    U R                   R                  5        H  nU" U5      nM     U$ r   rQ   )r   inputr^   s      r    forwardSequential.forward  s)    %%,,.E%LE /r"   c                N    U R                  [        [        U 5      5      U5        U $ r   r   )r   r   s     r    r   Sequential.append  s    #c$i.&1r"   c                   [        U[        5      (       d  [        S[         35      e[        U R                  5      nU* Us=::  a  U::  d  O  [        SU 35      eUS:  a  X-  n[        X1S5       H4  nU R                  [        US-
  5         U R                  [        U5      '   M6     X R                  [        U5      '   U $ )Nzmodule should be of type: zIndex out of range: r   r   r   )rX   r   AssertionErrorr4   r%   r   r   r]   )r   r   r   nr_   s        r    r   Sequential.insert  s    &%(( #=eW!EFF  !e q 3E7;<<19JEq$A'+'7'7AE
'CDSV$ %'-U$r"   c                :    U H  nU R                  U5        M     U $ r   )r   )r   
sequentialr^   s      r    r   Sequential.extend,  s    EKK  r"   c                H    [        U R                  R                  5       5      $ r   r   r5   s    r    r;   Sequential.__iter__1  r   r"   rE   )r   z?Layer | tuple[str, Layer] | list[Any] | OrderedDict[str, Layer]rb   rc   )r   zstr | slice | intrb   r   )r   r]   r^   r   rb   rc   )r   r]   rb   rc   rd   )r   r
   rb   r
   )r   r   rb   r   )r   re   r   r   rb   r   )r   rh   rb   r   r   )rZ   ri   rj   rk   rl   r   r(   r-   r0   r6   r   r   r   r   r;   rm   rn   ro   s   @r    r   r     sT    .`3"3 
3$9(#
%

/ /r"   r   )
__future__r   typingcollectionsr   collections.abcr   r   r   r   	itertoolsr	   r
   typing_extensionsr   r   r   base.dygraph.baser   base.frameworkr   r   r   __all__paddle.utils.decorator_utilsr   r   rq   r   r   r   rE   r"   r    <module>r     s    #  # A A   "   , ' 

_0 _0D	d1E d1NOE Odt tny/ y/r"   