| 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 : /lib/python3/dist-packages/pythran/optimizations/__pycache__/ |
Upload File : |
�
cR�a�
� �^ � d Z ddlmZ ddlmZ ddlZddlmZ ddl m
Z
G d� de� � ZdS ) z> Simplify expressions based on range information when possible� )�RangeValues)�TransformationN)�isinf)�deepcopyc �8 � e Zd ZdZd� Zd� Zd� Zd� ZeZd� Z e Z
dS )�RangeBasedSimplifya�
Simplify expressions based on range analysis
>>> import gast as ast
>>> from pythran import passmanager, backend
>>> node = ast.parse("def any():\n for x in builtins.range(10): y=x%8")
>>> pm = passmanager.PassManager("test")
>>> _, node = pm.apply(RangeBasedSimplify, node)
>>> print(pm.dump(backend.Python, node))
def any():
for x in builtins.range(10):
y = (x if (x < 8) else (x - 8))
>>> node = ast.parse("def any(): x = 1 or 2; return 3 == x")
>>> pm = passmanager.PassManager("test")
>>> _, node = pm.apply(RangeBasedSimplify, node)
>>> print(pm.dump(backend.Python, node))
def any():
x = (1 or 2)
return 0
>>> node = ast.parse("def a(i): x = 1,1,2; return x[2], x[0 if i else 1]")
>>> pm = passmanager.PassManager("test")
>>> _, node = pm.apply(RangeBasedSimplify, node)
>>> print(pm.dump(backend.Python, node))
def a(i):
x = (1, 1, 2)
return (2, 1)
c �: � t j | t � � d S �N)r �__init__r )�selfs �L/usr/lib/python3/dist-packages/pythran/optimizations/range_based_simplify.pyr zRangeBasedSimplify.__init__+ s � ����k�2�2�2�2�2� c � � |S r
� �r �nodes r
�visit_OMPDirectivez%RangeBasedSimplify.visit_OMPDirective. s � ��r c � � | � |� � }t |j t j � � s|S | j |j }| j |j }|j dk st |j
� � r|S |j |j k r|S |j
|j
dz k r|S t |j � � t |j � � }}t |j � � }d| _ t j
t j |j t j � � g|j g� � |t j |t j � � |� � � � S )Nr � T)�
generic_visit�
isinstance�op�ast�Mod�range_values�right�left�lowr �highr �update�IfExp�Compare�Lt�BinOp�Sub)r r �right_range�
left_range�cleft0�cleft1�crights r
�visit_BinOpzRangeBasedSimplify.visit_BinOp1 s � ��!�!�$�'�'���$�'�3�7�+�+� ��K��'��
�3���&�t�y�1�
��?�Q���%��(8�"9�"9���K��>�[�_�,�,�,��K��?�[�-��1�1�1��K�!�$�)�,�,�h�t�y�.A�.A����$�*�%�%������y���T�Y�����
�T�Z�L�I�I����6�3�7�9�9�f�=�=�?� ?� ?r c � � | j | }t |j � � r| � |� � S |j |j k r!d| _ t
j |j d � � S | � |� � S )NT)r r r r r r r �Constant)r r �range_values r
�visit_rangezRangeBasedSimplify.visit_rangeH su � ��'��-����!�"�"� ,��%�%�d�+�+�+�
�_�� 0�
0�
0��D�K��<����6�6�6��%�%�d�+�+�+r c � � t |j t j � � r| � |� � S | � |� � S r
)r �ctxr �Loadr/ r r s r
�
visit_NamezRangeBasedSimplify.visit_NameT s@ � ��d�h���)�)� *��#�#�D�)�)�)��!�!�$�'�'�'r N)�__name__�
__module__�__qualname__�__doc__r r r+ r/ �
visit_Comparer3 �visit_Subscriptr r r
r r sq � � � � � �� �>3� 3� 3�� � �?� ?� ?�.,� ,� ,� �M�(� (� (�
!�O�O�Or r )r7 �pythran.analysesr �pythran.passmanagerr �gastr �mathr �copyr r r r r
�<module>r? s� �� D� D� (� (� (� (� (� (� .� .� .� .� .� .� � � � � � � � � � � � � � � � �N!� N!� N!� N!� N!�� N!� N!� N!� N!� N!r