← Back
Editing: modindex.cpython-311.pyc
� cR�az � �v � d Z ddlmZmZmZmZ ddlmZ ddlmZ ddl m Z ddlZddl mZ G d� d e� � ZdS ) z+ Simplify modulo computation based on index� )�UseDefChains� Ancestors�Aliases�RangeValues)�Identifiers)�Transformation)�MODULESN)�deepcopyc �* � e Zd ZdZd� Zd� Zd� Zd� ZdS )�ModIndexa] Simplify modulo on loop index >>> import gast as ast >>> from pythran import passmanager, backend >>> pm = passmanager.PassManager("test") >>> code = """ ... def foo(x): ... y = builtins.len(x) ... for i in builtins.range(8): ... z = i % y""" >>> node = ast.parse(code) >>> _, node = pm.apply(ModIndex, node) >>> print(pm.dump(backend.Python, node)) def foo(x): y = builtins.len(x) i_m = ((0 - 1) % y) for i in builtins.range(8): i_m = (0 if ((i_m + 1) == y) else (i_m + 1)) z = i_m c � � t j | t t t t t � � t � � | _ d S )N) r �__init__r r r r r �dict� loops_mod)�selfs �@/usr/lib/python3/dist-packages/pythran/optimizations/modindex.pyr zModIndex.__init__# s3 � ����l�I�w� +�[� :� :� :�������� c �\ � | j | }t |� � dk o|d j S )N� r )�use_def_chains�len�node)r r �chains r � single_defzModIndex.single_def( s* � ��#�D�)���5�z�z�Q��0�5��8�=�0r c �~ � t |j t j � � s| � |� � S t |j t j � � s| � |� � S | � |j � � }|s| � |� � S | j |j j j dk r| � |� � S t |j t j � � s| � |� � S | � |j � � }|s| � |� � S | j | d }t |t j � � s| � |� � S t |j t j � � s| � |� � S || j | v r| � |� � S d }| j |j j D ]}|t$ d d u r|}� |�| � |� � S |j j dz }d}|| j v r.d� |j j |� � }|dz }|| j v �.|j j } t- | � � dk r| d nt j dd � � } t j t j |t j � � d d � � gt j t j t7 | � � t j � � t j dd � � � � t j � � t7 |j � � � � d � � }t j t j |t j � � d d � � t j � � t j dd � � � � }t j t j |t j � � d d � � gt j t j |t j! � � gt7 |j � � g� � t j dd � � t7 |� � � � d � � } | j"