Ë
    Ž\;jª'  ã                   ó8  — d dl Z d dlZd dlZd dlmc mZ d dlmZ ddlm	Z	m
Z
  G d„ d«      Z e«       Zej                  d„ «       Zej                  d„ «       Zej                  d	„ «       Zd
dddddddddddœZd!d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd „ Zy)"é    N)Ú	frameworké   )Úop_infoÚop_mapc                   ó   — e Zd Zd„ Zd„ Zd„ Zy)Ú
PrimOptionc                 ó   — d| _         y )NF©Úenable_prim©Úselfs    úgG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/incubate/autograd/utils.pyÚ__init__zPrimOption.__init__   s
   € Ø ˆÕó    c                 ó   — | j                   S ©Nr
   r   s    r   Ú
get_statuszPrimOption.get_status   s   € Ø×ÑÐr   c                 ó   — || _         y r   r
   )r   Úflags     r   Ú
set_statuszPrimOption.set_status   s
   € ØˆÕr   N)Ú__name__Ú
__module__Ú__qualname__r   r   r   © r   r   r   r      s   „ ò!ò ó r   r   c                  ó*   — t         j                  «       S )a×  
    Note:
        **ONLY available in the static graph mode.**

    Shows whether the automatic differentiation mechanism based on
    automatic differential basic operators is ON. Defaults to OFF.

    Returns:
        flag(bool): Whether the automatic differentiation mechanism based on automatic differential basic operators is ON.

    Examples:

        .. code-block:: python

            >>> import paddle
            >>> from paddle.incubate.autograd import enable_prim, disable_prim, prim_enabled

            >>> paddle.enable_static()
            >>> enable_prim()

            >>> print(prim_enabled())
            True

            >>> disable_prim()

            >>> print(prim_enabled())
            False

    )Úprim_optionr   r   r   r   Úprim_enabledr   &   s   € ô> ×!Ñ!Ó#Ð#r   c                  ó.   — t         j                  d«       y)aÇ  
    Note:
        **ONLY available in the static graph mode.**

    Turns ON automatic differentiation mechanism based on automatic
    differential basic operators.

    Examples:

        .. code-block:: python

            >>> import paddle
            >>> from paddle.incubate.autograd import enable_prim, prim_enabled

            >>> paddle.enable_static()
            >>> enable_prim()

            >>> print(prim_enabled())
            True

    TN©r   r   r   r   r   r   r   H   s   € ô. ×Ñ˜4Õ r   c                  ó.   — t         j                  d«       y)a/  
    Note:
        **ONLY available in the static graph mode.**

    Turns OFF automatic differentiation mechanism based on automatic
    differential basic operators.

    Examples:

        .. code-block:: python

            >>> import paddle
            >>> from paddle.incubate.autograd import enable_prim, disable_prim, prim_enabled

            >>> paddle.enable_static()
            >>> enable_prim()

            >>> print(prim_enabled())
            True

            >>> disable_prim()

            >>> print(prim_enabled())
            False

    FNr   r   r   r   Údisable_primr!   b   s   € ô8 ×Ñ˜5Õ!r   ÚboolÚint16Úint32Úint64Úfloat16Úfloat32Úfloat64Úuint8Úint8Ú	complex64Ú
complex128)r   r   é   é   é   é   é   é   é   é   é   c                 óþ   — t        |t        «      sJ ‚t        |«      dk(  ry t        |«      dk(  r+|r| j                  |d   «      gS | j                  |d   «      S |D �cg c]  }| j                  |«      ‘Œ c}S c c}w )Nr   r   )Ú
isinstanceÚlistÚlenÚvar)ÚblockÚnamesÚis_tensor_listÚnames       r   Úget_var_blockr?   �   sw   € Ü�eœTÔ"Ð"Ð"Ü
ˆ5ƒz�Q‚ØÜ	ˆU‹�qŠÙØ—I‘I˜e A™hÓ'Ð(Ð(Ø�y‰y˜˜q™Ó"Ð"á,1Ó2©E D�—	‘	˜$•¨EÑ2Ð2ùÒ2s   ÁA:c           	      ó´   — | j                   €g S t        | j                   «      D �cg c]'  }t        | j                  | j	                  |«      «      ‘Œ) c}S c c}w r   )Úinput_namesÚsortedr?   r;   Úinput©ÚopÚns     r   Úget_input_var_listrG   œ   sR   € Ø	‡~�~ÐØˆ	ô ;AÀÇÁÔ:Pó
Ù:P°QŒM˜"Ÿ(™( B§H¡H¨Q£KÕ0Ð:Pñ
ð 	
ùò 
ó   ¦,Ac                 óº   — d| vr| }n| j                  d«      d   }|j                  «       j                  «       \  }}|j                  «       |j                  «       fS )NÚ=r   )ÚsplitÚstrip)ÚitemÚresÚarg_typeÚarg_names       r   Ú
_solve_argrQ   ¥   sR   € Ø
�$�Ø‰à�j‰j˜‹o˜aÑ ˆØŸ9™9›;×,Ñ,Ó.Ñ€XˆxØ�>‰>Ó˜XŸ^™^Ó-Ð-Ð-r   c                 ó  — t         | j                     }d|j                  «       v r||d   j                  «       v r|d   |   }|| j                  vry |dk(  r$t	        j
                  | j                  |«      «      S | j                  |«      S )NÚattrsÚDataType)r   ÚtypeÚkeysÚ
attr_namesÚdtypesÚdtypeÚattr)rE   rO   rP   Ú
op_contents       r   Ú_get_attr_valuer\   ®   s‚   € Ü˜Ÿ™‘€JØ�*—/‘/Ó#Ñ#¨°J¸wÑ4G×4LÑ4LÓ4NÑ(NØ˜gÑ& xÑ0ˆð �r—}‘}Ñ$Øà�zÒ!Ü—<‘< §¡¨Ó 1Ó2Ð2Ø�w‰w�xÓ Ð r   c                 ó   — t         |   }|d   j                  d«      }t        j                  «       }g }|D �]B  }t	        |«      \  }}t
        | j                     }	|dv r½|dk(  rdnd}
|	j                  |
«      r£|	|
   j                  |«      }|st        d|› d|› d	| j                  › d
�«      ‚dD ]i  }|j                  |«      }|€Œ|| j                  v sŒ&t        | j                  | j                  |«      «      sŒLt        d|› d|› d| j                  › d
�«      ‚ |dv r;d|	j                  «       v r"||	d   j                  «       v r|||	d   |   <   �Œ|||<   �Œ%t        | ||«      }|j                  |«       �ŒE ||fS )z&get attrs' values for api args' valuesÚargsÚ,)ÚIntArrayÚScalarr`   Ú	int_arrayÚscalarzNo value found for z of z type for operator Ú.)Útensor_nameÚtensors_namezTensor type of zL is not supported in composite op. Please set other type value of input arg z for operator )ÚTensorúTensor[]Úinputs)r   rK   ÚcollectionsÚOrderedDictrQ   r   rU   ÚgetÚ
ValueErrorrA   r?   r;   rC   rV   r\   Úappend)rE   Úphi_namer^   Ú	args_listri   rS   rM   rO   rP   r[   Ú
tensor_keyÚtensor_contentÚarg_name_newÚ
attr_values                 r   Ú_get_args_valuesru   ½   sØ  € ä�8Ñ€DØ�V‘×"Ñ" 3Ó'€IÜ×$Ñ$Ó&€FØ€EäˆÜ'¨Ó-Ñˆ�(Ü˜BŸG™G‘_ˆ
àÐ-Ñ-Ø(0°JÒ(>™ÀHˆJØ�~‰~˜jÔ)Ø!+¨JÑ!7×!;Ñ!;¸HÓ!E�Ù%Ü$Ø-¨h¨Z°t¸H¸:ÐEXÐY[×Y`ÑY`ÐXaÐabÐcóð ó <�Dà#1×#5Ñ#5°dÓ#;�Là$Ñ0Ø(¨B¯N©NÒ:Ü)¨"¯(©(°B·H±H¸\Ó4JÕKä(Ø-¨h¨Zð  8Dð  EQð  DRð  R`ð  ac÷  ahñ  ahð  `ið  ijð  kóð ð <ð Ð-Ñ-ð ˜JŸO™OÓ-Ñ-Ø 
¨8Ñ 4× 9Ñ 9Ó ;Ñ;à9A��z (Ñ+¨HÑ5Ó6à#+��xÓ ä(¨¨X°xÓ@ˆJØ�L‰L˜Ö$ðG ðJ �5ˆ=Ðr   c           	      ó$  — | j                   €g S | j                  t        v rt        | j                     d   }n| j                  }t        | |«      \  }}g }|j	                  «       D ]•  \  }}|| j                   v rq|dk(  r7|j                  t        | j                  | j                  |«      d¬«      «       ŒP|j                  t        | j                  | j                  |«      «      «       Œ…|j                  d«       Œ— |r|j                  |«       |S )zô
    Generate all args inputs of composite op. Because inputs of composite op is
    the same as phi op desribed in ops.yaml. So we need to map origin op to phi op
    and then push input data and attrs of origin op to correspondng phi op.
    Nro   rh   T)r=   )
rA   rU   r   ru   Úitemsrn   r?   r;   rC   Úextend)rE   ro   ri   rS   rN   rM   Útensor_types          r   Úprepare_python_api_argumentsrz   ì   sä   € ð 
‡~�~ÐØˆ	à�7‰7”fÑÜ˜bŸg™g‘ zÑ2‰Hà—w‘wˆHÜ(¨¨XÓ6‰ˆ�ØˆØ!'§¡¦ÑˆD�+Ø�r—~‘~Ñ%Ø *Ò,Ø—J‘JÜ%ØŸH™H b§h¡h¨t£nÀTôõð —J‘Jœ}¨R¯X©X°r·x±xÀ³~ÓFÕGð —
‘
˜4Õ ð "0ñ Ø�J‰J�uÔØˆ
r   c           	      ó´   — | j                   €g S t        | j                   «      D �cg c]'  }t        | j                  | j	                  |«      «      ‘Œ) c}S c c}w r   )Úoutput_namesrB   r?   r;   ÚoutputrD   s     r   Úget_output_var_listr~     sT   € Ø	‡�ÐØˆ	ô ˜BŸO™OÔ,ó
á,�ô ˜"Ÿ(™( B§I¡I¨a£LÕ1Ø,ñ
ð 	
ùò 
rH   c                 ó  — | j                   }|€g S | j                  }g }t        |   j                  d«      r|t        |   d   j	                  «       D ]]  }t        |   d   |   }||vr|j                  d«       Œ(t        | j                  | j                  |«      «      }|j                  |«       Œ_ |S t        |«      dk(  r;t        | j                  | j                  |d   «      «      }|j                  |«       |S t        d«      ‚)zlorigin op outputs must be mapped into outputs of composite rule. map info has been defined in op_compat.yamlNÚoutputsr   r   zgWhen replace op with composite rule, there must exist output map info from origin op to composite rule.)r|   rU   r   rl   rV   rn   r?   r;   r}   r9   rm   )rE   Úorigin_output_namesr>   rN   rM   Úorigin_output_nameÚorigin_output_vars          r   Úmap_output_for_compositer„     s  € àŸ/™/ÐØÐ"Øˆ	à�w‰wˆØˆÜ�$‰<×Ñ˜IÔ&Ü˜t™ YÑ/×4Ñ4Ö6�Ü%+¨D¡\°)Ñ%<¸TÑ%BÐ"Ø%Ð-@Ñ@Ø—J‘J˜tÔ$àÜ$1Ø—H‘H˜bŸi™iÐ(:Ó;ó%Ð!ð —
‘
Ð,Õ-ð 7ð( ˆ
ô Ð$Ó%¨Ò*ä -Ø—‘˜"Ÿ)™)Ð$7¸Ñ$:Ó;ó!Ðð �J‰JÐ(Ô)ð
 ˆ
ô Øyóð r   c                 óš   — | �.t        | t        j                  j                  j                  «      r| gS g }| D ]  }|t        |«      z  }Œ |S r   )r7   ÚpaddleÚbaser   ÚVariableÚflatten)ÚinpÚ	flattenedÚparts      r   r‰   r‰   7  sJ   € Ø
€{”j ¤f§k¡k×&;Ñ&;×&DÑ&DÔEØˆuˆØ€IÛˆØ”W˜T“]Ñ"‰	ð àÐr   c                 óH   — t        | «      }|D �cg c]  }|€Œ|‘Œ	 c}S c c}w r   )r‰   )rŠ   r‹   r:   s      r   Úflatten_and_remove_nonerŽ   @  s'   € Ü˜“€IÙ$Ó8™9�C¨©ŠC˜9Ñ8Ð8ùÒ8s   �˜c                 óŠ   — t        | t        j                  «      r| fS t        | t        j                  «      rt        | «      S | S r   )r7   r   rˆ   ÚtypingÚSequenceÚtuple)Úxss    r   Ú
as_tensorsr”   E  s6   € Ü�"”i×(Ñ(Ô)ØˆuˆÜ	�BœŸ™Ô	(Ü�R‹yÐàˆ	r   r   )rj   r�   r†   Úpaddle.framework.dtyper   rY   rX   Úpaddle.baseÚphi_ops_mapr   r   r   r   Ústatic_onlyr   r   r!   ÚINT_DTYPE_2_STRINGr?   rG   rQ   r\   ru   rz   r~   r„   r‰   rŽ   r”   r   r   r   Ú<module>rš      sã   ðó Û ã ß 'Ð 'Ý !ç (÷ ñ  ñ ‹l€ð ×Ññ$ó ð$ðB ×Ññ!ó ð!ð2 ×Ññ"ó ð"ð> ØØØØØØØØØØñÐ ó	3ò
ò.ò!ò,ò^òB
òò@ò9ó
r   