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/transformations/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

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

cR�a��n�dZddlmZddlmZmZddlmZddlm	Z	ddl
mZddlZ
Gd�d	e��ZdS)
z5 ExpandImports replaces imports by their full paths. �)�Transformation)�path_to_attr�path_to_node)�mangle)�PythranSyntaxError)�	AncestorsNc�F��eZdZdZ�fd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
�xZS)	�
ExpandImportsaO
    Expands all imports into full paths.

    Attributes
    ----------
    imports : {str}
        Imported module (python base module name)
    symbols : {str : (str,)}
        Matching between used name and real cxx name.

    Examples
    --------
    >>> import gast as ast
    >>> from pythran import passmanager, backend
    >>> node = ast.parse("from math import cos ; cos(2)")
    >>> pm = passmanager.PassManager("test")
    >>> _, node = pm.apply(ExpandImports, node)
    >>> print(pm.dump(backend.Python, node))
    import math as __pythran_import_math
    __pythran_import_math.cos(2)
    >>> node = ast.parse("from os.path import join ; join('a', 'b')")
    >>> _, node = pm.apply(ExpandImports, node)
    >>> print(pm.dump(backend.Python, node))
    import os as __pythran_import_os
    __pythran_import_os.path.join('a', 'b')
    c���tt|���t��t	��|_t
��|_dS�N)�superr
�__init__r�set�imports�dict�symbols)�self�	__class__s ��H/usr/lib/python3/dist-packages/pythran/transformations/expand_imports.pyrzExpandImports.__init__)s;���
�m�T�"�"�+�+�I�6�6�6��u�u����v�v�����c���d��fd�|jD��D��|_d��jD��}||jz|_tj|��|S)z�
        Visit the whole module and add all import at the top level.

        >> import numpy.linalg

        Becomes

        >> import numpy

        c��g|]}|�|��S�r)�.0�ks  r�
<listcomp>z.ExpandImports.visit_Module.<locals>.<listcomp>9s��H�H�H�1�a�H�Q�H�H�Hrc3�B�K�|]}��|��V��dSr)�visit)r�nrs  �r�	<genexpr>z-ExpandImports.visit_Module.<locals>.<genexpr>9s-����� B� B�1����A��� B� B� B� B� B� Brc
�x�g|]7}tjtj|t|����g����8Sr)�ast�Import�aliasr)r�is  rrz.ExpandImports.visit_Module.<locals>.<listcomp>:s7��O�O�O�Q�3�:�s�y��F�1�I�I�6�6�7�8�8�O�O�Or)�bodyrr"�fix_missing_locations)r�noders`  r�visit_ModulezExpandImports.visit_Module.sk���I�H� B� B� B� B��	� B� B� B�H�H�H��	�O�O�$�,�O�O�O���d�i�'��	��!�$�'�'�'��rc��|jD]}t|j�d����}|j�|d��|jr||j|j<n|dd�|j|d<d|_��dS)�/ Register imported modules and usage symbols.  �.rN�T)	�names�tuple�name�splitr�add�asnamer�update)rr(r$�
alias_names    r�visit_ImportzExpandImports.visit_Import?s����Z�	�	�E��u�z�/�/��4�4�5�5�J��L���Z��]�+�+�+��|�
=�-7���U�\�*�*�.8��!��n���Z��]�+��D�K�K��trc��t|j�d����}|j�|d��|jD]#}||jfz}||j|jp|j<�$d|_	dS)r+r,rTN)
r/�moduler1rr2r.r0rr3r4)rr(�module_pathr$�paths     r�visit_ImportFromzExpandImports.visit_ImportFromKs|���D�K�-�-�c�2�2�3�3�������Q��(�(�(��Z�	<�	<�E��%�*��.�D�7;�D�L���3���4�4�����trc�����j�|jd���j���}�fd�|jjD����|��|�_|S)aP
        Update import context using overwriting name information.

        Examples
        --------
        >> import foo
        >> import bar
        >> def foo(bar):
        >>     print(bar)

        In this case, neither bar nor foo can be used in the foo function and
        in future function, foo will not be usable.
        Nc�P��g|]"}�j�|jd����#Sr)r�pop�id)r�argrs  �rrz3ExpandImports.visit_FunctionDef.<locals>.<listcomp>es-���B�B�B�C���	�	�#�&�$�	'�	'�B�B�Br)rr>r0�copy�args�
generic_visit)rr(�gsymbolss`  r�visit_FunctionDefzExpandImports.visit_FunctionDefUsp���	
������D�)�)�)��<�$�$�&�&��B�B�B�B�4�9�>�B�B�B�B����4� � � �����rc����t|jtj��r�|jj�jvr�t
�j|jj��}t|dd�����s\|jD]R}t|tj��sd}t||����j|jj�j|j<�SdS��
|��}�fd�|jD��|S)a
        Update import context using overwriting name information.

        Examples
        --------
        >> import foo
        >> def bar():
        >>     foo = 2
        >>     print(foo)

        In this case, foo can't be used after assign.
        �	isliteralc��dS�NFrrrr�<lambda>z,ExpandImports.visit_Assign.<locals>.<lambda>y����rzUnsupported module aliasingNc���g|]<}t|tj����j�|jd����=Sr)�
isinstancer"�Namerr>r?)r�trs  �rrz.ExpandImports.visit_Assign.<locals>.<listcomp>�sM���	?�	?�	?�
�j��C�H�&=�&=�	?���	�	�!�$��	%�	%�	?�	?�	?r)rM�valuer"rNr?rr�getattr�targetsrrC)rr(�symbol�target�err�new_nodes`     r�visit_AssignzExpandImports.visit_Assignjs����d�j�#�(�+�+�	��
�
���0M�0M�!�$�,�t�z�}�"=�>�>�F�>�7�6�;�
�
�>�>�@�@�
�"�l�J�J�F�%�f�c�h�7�7�>�;��0��f�=�=�=�.2�l�4�:�=�.I�D�L���+�+��t��%�%�d�+�+��	?�	?�	?�	?��"�	?�	?�	?�	?��rc��|�|��|j|jvr�t|j|j��}t	|dd�����sa|j|d}tjtjtj	tj
f}t||��rtd|���t|j|j��}|j|_t
j||��|S|S)z�
        Replace name with full expanded name.

        Examples
        --------
        >> from numpy.linalg import det

        >> det(a)

        Becomes

        >> numpy.linalg.det(a)
        rGc��dSrIrrrrrJz*ExpandImports.visit_Name.<locals>.<lambda>�rKr���z*Unsupported module identifier manipulation)rCr?rrrQ�	ancestorsr"�Tuple�List�Set�ReturnrMrr�ctx�
copy_location)rr(rS�parent�	blacklistrVs      r�
visit_NamezExpandImports.visit_Name�s���	
���4� � � ��7�d�l�"�"�!�$�,�t�w�"7�8�8�F�>�7�6�;�
�
�>�>�@�@�	
����-�b�1�� �Y� �X� �W� �Z�)�	��f�i�0�0��,�D�����$�D�L���$9�:�:�H��8�H�L���h��-�-�-��O��r)�__name__�
__module__�__qualname__�__doc__rr)r6r;rErWrd�
__classcell__)rs@rr
r
s����������6�����
���"
�
�
�������*���8������rr
)rh�pythran.passmanagerr�
pythran.utilsrr�pythran.conversionr�pythran.syntaxr�pythran.analysesr�gastr"r
rrr�<module>rps���;�;�.�.�.�.�.�.�4�4�4�4�4�4�4�4�%�%�%�%�%�%�-�-�-�-�-�-�&�&�&�&�&�&�����Y�Y�Y�Y�Y�N�Y�Y�Y�Y�Yr

Youez - 2016 - github.com/yon3zu
LinuXploit