관리-도구
편집 파일: from_template.cpython-37.pyc
B ��Fd� � @ sl d Z ddlmZmZmZ ddgZddlZddlZddlZe� dej �Ze� dej �Ze� dej �Z d d � Ze� d�Ze� d�Ze� d �Zdd� Ze� d�Zdd� Zdd� Ze� d�Zdd� Zdd� Ze� dej �Zdd� Zdd� Zed�Zedk�rhyejd ZW n" e k �r$ ej!Z"ej#Z$Y n*X e%ed �Z"ej&�'e�\Z(Z)e(Z*e%e*d!�Z$e"�+� Z,ee,�Z-e$�.e-� dS )"a� process_file(filename) takes templated file .xxx.src and produces .xxx file where .xxx is .pyf .f90 or .f using the following template rules: '<..>' denotes a template. All function and subroutine blocks in a source file with names that contain '<..>' will be replicated according to the rules in '<..>'. The number of comma-separated words in '<..>' will determine the number of replicates. '<..>' may have two different forms, named and short. For example, named: <p=d,s,z,c> where anywhere inside a block '<p>' will be replaced with 'd', 's', 'z', and 'c' for each replicate of the block. <_c> is already defined: <_c=s,d,c,z> <_t> is already defined: <_t=real,double precision,complex,double complex> short: <s,d,c,z>, a short form of the named, useful when no <p> appears inside a block. In general, '<..>' contains a comma separated list of arbitrary expressions. If these expression must contain a comma|leftarrow|rightarrow, then prepend the comma|leftarrow|rightarrow with a backslash. If an expression matches '\<index>' then it will be replaced by <index>-th expression. Note that all '<..>' forms in a block must have the same number of comma-separated entries. Predefined named template rules: <prefix=s,d,c,z> <ftype=real,double precision,complex,double complex> <ftypereal=real,double precision,\0,\1> <ctype=float,double,complex_float,complex_double> <ctypereal=float,double,\0,\1> � )�division�absolute_import�print_function�process_str�process_fileNz2(\n|\A)(( (\$|\*))|)\s*(subroutine|function)\bz+\n\s*end\s*(subroutine|function)\b.*(\n|\Z)z\n (\$|\*)\s*function\bc C s� g }d}x�t �| |�}|dkr P |�� }t�| ||�� �rrx6| �d||�}|dkrTP |}| ||d � dkr<P q<W |d7 }t�| |�� �}|r�|�� d p�t| � }}|� ||f� q W |S )z� Return a list of tuples for each function or subroutine each tuple is the start and end of a subroutine or function to be expanded. r N� ���� z $� ) �routine_start_re�search�start�function_start_re�match�end�rfind�routine_end_re�len�append)�astr�spanlist�ind�mr �ir � r �P/opt/alt/python37/lib64/python3.7/site-packages/numpy/distutils/from_template.py�parse_structure; s( r z<\s*(\w[\w\d]*)\s*>z<\s*(\w[\w\d]*)\s*=\s*(.*?)\s*>z<\s*((.*?))\s*>c C sT t �| �}i }x@|D ]8}|d �� p*t|�}|d �dd�}t|�}|||<