B
    Y                 @   s   d dl Z d dlZd dlZdd Zdd ZdZdZdZd	d
 Zdd Z	dd Z
dd ZdZdZdd Zdd Zdd Zdd ZdZdZdd Zdd  Zd!d" Zd#d$ ZdS )%    Nc           
   C   s   ddddg} t jt}xv| D ]n}t j||d }t|d}| }W d Q R X t|}t j||d }t|d}|| W d Q R X qW d S )	NreduceZmoveZ	nonreduceZnonreduce_axisz_template.crz.cw)	ospathdirname__file__joinopenreadtemplatewrite)modulesdirpathmodulefilepathfsrc_str r   6lib/python3.7/site-packages/bottleneck/src/template.pymake_c_files   s    
r   c             C   s<   |   }t|}t|}t|}d|} tdd| } | S )N
z\n\s*\n\s*\nz\n\n)
splitlinesrepeat_templatingdtype_templatingstring_templatingr	   resub)r   Zsrc_listr   r   r   r      s    
r   z^/\*\s*repeat\s*=\s*z^/\*\s*repeat endz.*\*\/.*c             C   sb   d}xXt | |tt\}}|d kr"P | || }t|}| d | | | |d d   } |}qW | S )Nr      )
next_blockREPEAT_BEGIN
REPEAT_ENDexpand_functions_repeat)linesindexidx0idx1	func_listr   r   r   r   $   s     r   c             C   sF   t t| }t| d |d  }| |d d  } d| }t||}|S )Nr   r   )first_occurenceCOMMENT_ENDrepeat_infor	   expand_repeat)r#   idxrepeat_dictfunc_strr'   r   r   r   r"   2   s    


r"   c             C   s(   d | }td|}t|d }|S )N z\{.*\}r   )r	   r   findallastliteral_eval)r#   linerepeatr-   r   r   r   r*   ;   s    
r*   c                s    fdd D }t t|dkr*td|d }g }xLt|D ]@}| d d  }x  D ]}|| | | }qVW |d|  q@W d| }|S )Nc                s   g | ]}t  | qS r   )len).0key)r-   r   r   
<listcomp>C   s    z!expand_repeat.<locals>.<listcomp>r   z(All repeat lists must be the same lengthr   r   r/   )r5   set
ValueErrorrangereplaceappendr	   r   )r.   r-   ZnrepeatsZnrepeatr'   ir   r7   r   )r-   r   r+   B   s    
r+   z^/\*\s*dtype\s*=\s*z^/\*\s*dtype endc             C   sb   d}xXt | |tt\}}|d kr"P | || }t|}| d | | | |d d   } |}qW | S )Nr   r   )r   DTYPE_BEGIN	DTYPE_ENDexpand_functions_dtype)r#   r$   r%   r&   r'   r   r   r   r   W   s     r   c             C   sF   t t| }t| d |d  }| |d d  } d| }t||}|S )Nr   r   )r(   r)   
dtype_infor	   expand_dtypes)r#   r,   dtypesr.   r'   r   r   r   rA   e   s    


rA   c             C   s<   d | }td|}t|dkr*tdt|d }|S )Nr/   z\[.*\]r   z)expecting exactly one dtype specificationr   )r	   r   r0   r5   r:   r1   r2   )r#   r3   rD   r   r   r   rB   n   s    
rB   c             C   sv   d| krt dg }x\|D ]T}| d d  }x4t|D ](\}}|d| |}|dkr4|d }q4W |d|  qW |S )NZDTYPEzcannot find dtype markerzDTYPE%dr   r   z

)r:   	enumerater<   r=   )r.   rD   r'   Zdtyper   r>   Zdtr   r   r   rC   w   s    
rC   z.*MULTILINE STRING BEGIN.*z.*MULTILINE STRING END.*c             C   sf   d}x\t | |tt\}}|d kr"P | |d | }t|}| d | | | |d d   } |}qW | S )Nr   r   )r   STRING_BEGIN
STRING_ENDquote_string)r#   r$   r%   r&   Zstr_listr   r   r   r      s     r   c             C   sB   x,t t| D ]}d| |  d d | |< qW | d d | d< | S )N"z\n;)r;   r5   )r#   r>   r   r   r   rH      s    rH   c             C   s6   x(t t|D ]}t| || r|S qW tdd S )Nz`pattern` not found)r;   r5   r   matchr:   )patternr#   r>   r   r   r   r(      s    r(   c             C   s^   d }xTt |t| D ]B}| | }t||r2|}qt||r|d krNtd||fS qW dS )Nz&found end of function before beginning)NN)r;   r5   r   rL   r:   )r#   r$   Zbegine_patternZend_patternr,   r>   r3   r   r   r   r      s    r   )r   r   r1   r   r   r    r!   r)   r   r"   r*   r+   r?   r@   r   rA   rB   rC   rF   rG   r   rH   r(   r   r   r   r   r   <module>   s.   				