403Webshell
Server IP : 217.160.0.135  /  Your IP : 216.73.217.85
Web Server : Apache
System : Linux www 6.18.52-i1-ampere #1203 SMP Mon Sep 14 18:29:59 CEST 2026 aarch64
User : sws1074145052 ( 1074145052)
PHP Version : 8.3.32
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /usr/lib/python3/dist-packages/pythran/analyses/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib/python3/dist-packages/pythran/analyses/__pycache__/ast_matcher.cpython-311.pyc
�

cR�a�����dZddlmZmZmZmZmZddlmZddl	m
Z
dZGd�de��Z
Gd�d	e��ZGd
�de��ZGd�d
e��ZGd�de��ZGd�de��ZdS)z9 Module to looks for a specified pattern in a given AST. �)�AST�iter_fields�NodeVisitor�Dict�Set)�permutations)�isnan�
c��eZdZdZdS)�DamnTooLongPatternz@ Exception for long dict/set comparison to reduce compile time. N��__name__�
__module__�__qualname__�__doc__���>/usr/lib/python3/dist-packages/pythran/analyses/ast_matcher.pyrr
s������J�J�J�Jrrc�$��eZdZdZd�fd�	Z�xZS)�Placeholderz= Class to save information from ast while check for pattern. Nc�r��||_||_tt|�����dS)z1 Placehorder are identified using an identifier. N)�id�type�superr�__init__)�self�
identifierr�	__class__s   �rrzPlaceholder.__init__s3��������	�
�k�4� � �)�)�+�+�+�+�+r�N�rrrrr�
__classcell__�rs@rrrsC�������G�G�,�,�,�,�,�,�,�,�,�,rrc��eZdZdZdS)�AST_anyz< Class to specify we don't care about a field value in ast. Nr
rrrr$r$s������F�F�F�Frr$c�"��eZdZdZ�fd�Z�xZS)�AST_orz�
    Class to specify multiple possibles value for a given field in ast.

    Attributes
    ----------
    args: [ast field value]
        List of possible value for a field of an ast.
    c�d��||_tt|�����dS)z) Initialiser to keep track of arguments. N)�argsrr&r)rr(rs  �rrzAST_or.__init__*s,�����	�
�f�d���$�$�&�&�&�&�&rr r"s@rr&r&sB���������'�'�'�'�'�'�'�'�'rr&c�n�eZdZdZd�Zd�Zd�Zed���Zd�Z	d�Z
d�Zd	�Zed
���Z
d�ZdS)
�Checka
    Checker for ast <-> pattern.

    NodeVisitor is needed for specific behavior checker.

    Attributes
    ----------
    node : AST
        node we want to compare with pattern
    placeholders : [AST]
        list of placeholder value for later comparison or replacement.
    c�"�||_||_dS)z Initialize attributes. N)�node�placeholders)rr,r-s   rrzCheck.__init__?s����	�(����rc���t|��t|��krdSt�fd�t||��D����S)z" Check if list of node are equal. Fc3�n�K�|]/\}}t|�j���|��V��0dSr)r*r-�visit)�.0�node_elt�pattern_eltrs   �r�	<genexpr>z#Check.check_list.<locals>.<genexpr>Hs^�����N�N�,�x����4�#4�5�5�;�;�K�H�H�N�N�N�N�N�Nr)�len�all�zip)r�	node_list�pattern_lists`  r�
check_listzCheck.check_listDsm����y�>�>�S��.�.�.�.��5��N�N�N�N�03�I�|�0L�0L�N�N�N�N�N�	Nrc��|j|jvr?t|j|j���|j|j��sdS|j�t
|j|j��sdS|j|j|j<dS)z�
        Save matching node or compare it with the existing one.

        FIXME : What if the new placeholder is a better choice?
        FNT)rr-r*r,r0r�
isinstance�r�patterns  r�visit_PlaceholderzCheck.visit_PlaceholderKs���
�J�$�+�+�+��$�)�T�%6�7�7�=�=��%�g�j�1�3�3�
,��5�
�\�
%�j���9@��/G�/G�
%��5�,0�I�D��g�j�)��4rc��dS)z Every node match with it. Tr)�_s r�
visit_AST_anyzCheck.visit_AST_any\s	���trc�D��t�fd�|jD����S)z; Match if any of the or content match with the other node. c3�N�K�|]}���j|��V�� dSr)�field_matchr,)r1�value_orrs  �rr4z%Check.visit_AST_or.<locals>.<genexpr>csI�����1�1���#�#�D�I�x�8�8�1�1�1�1�1�1r)�anyr(r=s` r�visit_AST_orzCheck.visit_AST_oras=����1�1�1�1�#*�<�1�1�1�1�1�	1rc����t�jt��sdSt|j��t
krt
d���t�fd�t|j��D����S)z Set have unordered values. FzPattern for Set is too longc3�X�K�|]$}���jj|��V��%dSr)r:r,�elts)r1�pattern_eltsrs  �rr4z"Check.visit_Set.<locals>.<genexpr>lsQ�����C�C�#��?�?�4�9�>�<�@�@�C�C�C�C�C�Cr)	r<r,rr5rK�MAX_UNORDERED_LENGTHrrGrr=s` r�	visit_SetzCheck.visit_Setfs�����$�)�S�)�)�	��5��w�|���3�3�3�$�%B�C�C�C��C�C�C�C�'3�G�L�'A�'A�C�C�C�C�C�	Crc����t|jt��sdSt�j��t
krt
d���ttt|jj������D]z}t|��D]8\}}|�
|jj|�j|��sn1�9�fd�|D��}|�|jj|��cS�{dS)z' Dict can match with unordered values. FzPattern for Dict is too longc�*��g|]}�j|��Sr)�values)r1�ir>s  �r�
<listcomp>z$Check.visit_Dict.<locals>.<listcomp>{s ���!I�!I�!I��'�.��"3�!I�!I�!Ir)
r<r,rr5�keysrMrr�range�	enumeraterEr:rQ)rr>�permutationrR�value�pattern_valuess `    r�
visit_DictzCheck.visit_Dictos	����$�)�T�*�*�	��5��w�|���3�3�3�$�%C�D�D�D�'��c�$�)�.�.A�.A�(B�(B�C�C�	I�	I�K�%�k�2�2�
I�
I���5��'�'��	��q�(9�(/��U�(;�=�=���E��"J�!I�!I�!I�[�!I�!I�!I�����t�y�'7��H�H�H�H�H���urc��t|t��r|�||��St|t��r(t	||j���|��St�||��S)z�
        Check if two fields match.

        Field match if:
            - If it is a list, all values have to match.
            - If if is a node, recursively check it.
            - Otherwise, check values are equal.
        )r<�listr:rr*r-r0�	strict_eq)r�
node_field�
pattern_fields   rrEzCheck.field_matchsr���m�T�*�*�	>��?�?�:�}�=�=�=��m�S�)�)�	M���T�%6�7�7�=�=�m�L�L�L����}�j�9�9�9rc�r�||krdS	t|��ot|��S#t$rYdSwxYw)NTF)r	�	TypeError)�f0�f1s  rr]zCheck.strict_eq�sN��
��8�8��4�	���9�9�*��r���*���	�	�	��5�5�	���s�(�
6�6c����t�t�j����sdSt��fd�t	�j��D����S)z�
        Check if the pattern match with the checked node.

        a node match if:
            - type match
            - all field match
        Fc3�f�K�|]+\}}��|t�|����V��,dSr)rE�getattr)r1�fieldrXr>rs   ��rr4z&Check.generic_visit.<locals>.<genexpr>�sU�����?�?�#�u�e��#�#�E�7�7�E�+B�+B�C�C�?�?�?�?�?�?r)r<rr,r6rr=s``r�
generic_visitzCheck.generic_visit�sl�����'�4��	�?�?�3�3�	��5��?�?�?�?�?�'2�4�9�'=�'=�?�?�?�?�?�	?rN)rrrrrr:r?�staticmethodrBrHrNrZrEr]rhrrrr*r*0s���������)�)�)�
N�N�N����"����\��1�1�1�
C�C�C���� :�:�:� ����\��?�?�?�?�?rr*c�.��eZdZdZ�fd�Zd�Zd�Z�xZS)�
ASTMatchera�
    Visitor to gather node matching with a given pattern.

    Examples
    --------
    >>> import gast as ast
    >>> code = "[(i, j) for i in range(a) for j in range(b)]"
    >>> pattern = ast.Call(func=ast.Name('range', ctx=ast.Load(),
    ...                                  annotation=None,
    ...                                  type_comment=None),
    ...                    args=AST_any(), keywords=[])
    >>> len(ASTMatcher(pattern).search(ast.parse(code)))
    2
    >>> code = "[(i, j) for i in range(a) for j in range(b)]"
    >>> pattern = ast.Call(func=ast.Name(id=AST_or('range', 'range'),
    ...                                  ctx=ast.Load(),
    ...                                  annotation=None,
    ...                                  type_comment=None),
    ...                    args=AST_any(), keywords=[])
    >>> len(ASTMatcher(pattern).search(ast.parse(code)))
    2
    >>> code = "{1:2, 3:4}"
    >>> pattern = ast.Dict(keys=[ast.Constant(3, None), ast.Constant(1, None)],
    ...                    values=[ast.Constant(4, None),
    ...                            ast.Constant(2, None)])
    >>> len(ASTMatcher(pattern).search(ast.parse(code)))
    1
    >>> code = "{1, 2, 3}"
    >>> pattern = ast.Set(elts=[ast.Constant(3, None),
    ...                         ast.Constant(2, None),
    ...                         ast.Constant(1, None)])
    >>> len(ASTMatcher(pattern).search(ast.parse(code)))
    1
    c���||_t��|_tt|�����dS)z? Basic initialiser saving pattern and initialising result set. N)r>�set�resultrrkr)rr>rs  �rrzASTMatcher.__init__�s7�������e�e���
�j�$���(�(�*�*�*�*�*rc���t|t�����|j��r|j�|��|�|��dS)z�
        Visitor looking for matching between current node and pattern.

        If it match, save it but whatever happen, keep going.
        N)r*�dictr0r>rn�addrh�rr,s  rr0zASTMatcher.visit�sX����t�v�v���$�$�T�\�2�2�	"��K�O�O�D�!�!�!����4� � � � � rc�:�|�|��|jS)z9 Facility to get values of the matcher for a given node. )r0rnrrs  r�searchzASTMatcher.search�s���
�
�4�����{�r)rrrrrr0rtr!r"s@rrkrk�sa�������!�!�F+�+�+�+�+�!�!�!�������rrkN)r�gastrrrrr�	itertoolsr�mathr	rM�	Exceptionrrr$r&r*rkrrr�<module>rys~��?�?�9�9�9�9�9�9�9�9�9�9�9�9�9�9�"�"�"�"�"�"���������K�K�K�K�K��K�K�K�
,�,�,�,�,�#�,�,�,�G�G�G�G�G�c�G�G�G�
'�'�'�'�'�S�'�'�'�"s?�s?�s?�s?�s?�K�s?�s?�s?�l8�8�8�8�8��8�8�8�8�8r

Youez - 2016 - github.com/yon3zu
LinuXploit