
    ϑi                         S SK r S SKrS SKrS SKJr  S SKJrJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJrJr  SS	KJrJr   " S
 S5      r " S S5      rg)    N)pir)Variablein_pir_mode)build_pipe_for_pylayer)LayerHelper)static_pylayer)flattenpack_sequence_as   )convert_to_staticunwrap_decoratorsc                   `   ^  \ rS rSrS rS\S\4U 4S jjrS rS r	S r
S	 rS\4S
 jrSrU =r$ )StaticPyLayerContext   c                 \    / U l         S U l        [        5       (       a  SU l        SU l        g g )Nzcf.tuple_pushzcf.tuple_pop)
saved_varssaved_vars_structurer   tuple_push_op_nametuple_pop_op_name)selfs    ]/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/jit/dy2static/py_layer.py__init__StaticPyLayerContext.__init__   s-    $(!==&5D#%3D"     attrvaluec                    > SS/n[        5       (       aG  X;  aB  [        U[        R                  5      (       a#  [	        [
        R                  " SU S35      5      e[        TU ]!  X5        g )Nr   r   z                `ctx.a   = tensor` is not allowed in static mode, please use `ctx.save_for_backward(tensor)` instead.

                For example:

                    >>> class ExamplePyLayer(PyLayer):
                    ...     @staticmethod
                    ...     def forward(ctx, x):
                    ...         # ctx.x = x  # This is not allowed in static mode, Replace it with `ctx.save_for_backward(x)`
                    ...         ctx.save_for_backward(x)
                    ...         x1 = paddle.tanh(x)
                    ...         return x1

                    ...     @staticmethod
                    ...     def backward(ctx, grad):
                    ...         # x = ctx.x  # Same as above, replace it with `x, = ctx.saved_tensor()`
                    ...         x, = ctx.saved_tensor()
                    ...         x_grad = grad * (1 - paddle.square(x))
                    ...         return x_grad
                )	r   
isinstancer   ValueAttributeErrortextwrapdedentsuper__setattr__)r   r   r   attr_allow_list	__class__s       r   r$    StaticPyLayerContext.__setattr__&   sh    ')?@MM+5#)),, V  0 	D(r   c                 H   [        5       (       aX  Xl        [        U5      n[        [	        S U5      5      n[
        R                  " 5       nUR                  5       n[        XS5        g U H5  n[        U[        5      (       d   eU R                  R                  U5        M7     g )Nc                 6    [        U [        R                  5      $ N)r   r   r   )xs    r   <lambda>8StaticPyLayerContext.save_for_backward.<locals>.<lambda>L   s    Asyy!9r   )r   r   r	   listfilterr   get_current_insertion_pointblockr   r   r   r   append)r   tensorsflatten_tensorstensor_elementscurrent_insert_pointcurrent_blocktensors          r   save_for_backward&StaticPyLayerContext.save_for_backwardG   s    ==(/%%g.O"9?KO $'#B#B#D 0668M"=B!!&(3333&&v. "r   c                    [        5       (       a  [        R                  " 5       nUR                  5       n/ nUR                   HA  nUR                  5       U R                  :X  d  M#  UR                  5       R                  5       nMC     U R                  bm  [        U R                  5      nSn[        U5       H1  u  px[        U[        R                  5      (       d  M&  X6   XW'   US-  nM3     [        U R                  U5      nU$ [        S5      n	/ nU R                    HN  n
U	R#                  U
R
                  U
R$                  U
R&                  U
R(                  S9nUR+                  U5        MP     U$ )Nr   r   r   )namedtypeshapetype)r   r   r0   r1   opsr<   r   as_tuple_pop_oppop_all_valuesr   r	   	enumerater   r   r
   r   r   create_variabler=   r>   r?   r2   )r   r6   r7   out_listopflattened_structurevalue_cursorir8   helper	saved_varouts               r   saved_tensor!StaticPyLayerContext.saved_tensorV   sI   ==#&#B#B#D 0668MH#''779 6 66!113BBDH ( ((4&-d.G.G&H# !*+>!?IA!&#))44191G+.$) "@ ,--/B  !!78FH!__	,,"#//#//"	 -  $ - r   c                     [         er*   NotImplementedErrorr   argss     r   mark_not_inplace%StaticPyLayerContext.mark_not_inplacew       !!r   c                     [         er*   rP   rR   s     r   mark_non_differentiable,StaticPyLayerContext.mark_non_differentiable{   rV   r   c                     [         er*   rP   )r   r   s     r   set_materialize_grads*StaticPyLayerContext.set_materialize_grads   rV   r   )r   r   r   r   )__name__
__module____qualname____firstlineno__r   strobjectr$   r9   rM   rT   rX   boolr[   __static_attributes____classcell__)r&   s   @r   r   r      sB    4) )F )B/B"""4 " "r   r   c                        \ rS rSrS rS rSrg)StaticPyLayer   c                    Xl         [        UR                  5      u  o l        [        UR                  5      u  o l        [        5       U l        [        R                  " [        U R                  5      U R                  5      U l        [        R                  " [        U R
                  5      U R                  5      U l        g r*   )dyfunc_selfr   forwardorig_forward_fnbackwardorig_backward_fnr   static_pylayer_context	functoolspartialr   forward_fn_with_ctxbackward_fn_with_ctx)r   rj   _s      r   r   StaticPyLayer.__init__   s    &"3K4G4G"H#4[5I5I#J  &:&<##,#4#4d223T5P5P$
  %.$5$5d334''%
!r   c                 ~   [         R                  " U R                  R                  5      nUR                  " U R                  /UQ70 UD6nUR                  5         [        UR                  R                  5       5       VVs/ s H  u  pVUS:  d  M  UPM     nnn[        U R                  UU R                  S9$ s  snnf )Nr   )
forward_fninputsbackward_fn)inspect	signaturerj   rk   bindapply_defaultsrC   	argumentsvaluesr   rr   rs   )r   rS   kwargs
dyfunc_sig
bound_argsrI   item
input_argss           r   applyStaticPyLayer.apply   s    &&t'7'7'?'?@
__T%5%5GGG
!!# %Z%9%9%@%@%BC
C1u C 	 
 //11
 	

s   B9B9)rs   rj   rr   rn   rl   ro   N)r]   r^   r_   r`   r   r   rd    r   r   rg   rg      s    

r   rg   )rp   rz   r!   paddler   paddle.base.frameworkr   r   paddle.base.libpaddle.pirr   paddle.common_ops_importr   paddle.static.nnr   paddle.utilsr	   r
   program_translatorr   r   r   rg   r   r   r   <module>r      s<        7 < 0 + 2 Dc" c"L
 
r   