B
     \                 @   s<   d dl mZmZmZ d dlZd dlZd dlmZ dd ZdS )    )absolute_importprint_functiondivisionN)utilsc                s   dd }dd   fdd}||  d\}}}t||}t||}t }t }	x|D ]}
|t|
O }qZW x|D ]}
|	t|
O }	qtW |	|}|rtdd	t| ||fS )
zParse generalized ufunc signature.

    NOTE: ',' (COMMA) is a delimiter; not separator.
          This means trailing comma is legal.
    c             S   s   d dd | D S )N c             s   s   | ]}|t jkr|V  qd S )N)stringZ
whitespace).0c r
   6lib/python3.7/site-packages/numba/npyufunc/sigparse.py	<genexpr>   s    z3parse_signature.<locals>.stripws.<locals>.<genexpr>)join)sr
   r
   r   stripws   s    z parse_signature.<locals>.stripwsc                s$   fdd}|  t  fddS )Nc               3   s
    V  d S )Nr
   r
   )srcr
   r   readline   s    z4parse_signature.<locals>.tokenizer.<locals>.readlinec                  s   t  S )N)nextr
   )genr
   r   <lambda>   s    z4parse_signature.<locals>.tokenizer.<locals>.<lambda>)tokenizegenerate_tokens)r   r   r
   )r   r   r   	tokenizer   s    z"parse_signature.<locals>.tokenizerc             3   s    | }xt |}|d dkrg }xZt |}|d dkr<P q$|d tjkrZ||d  q$|d dkrjq$q$td|d  q$W t|V  t |}|d dkrq
qt|d rP q
t|d rP q
td|d  q
W d S )N   ()r   ,zbad token in signature "%s")r   r   NAMEappend
ValueErrortupleISEOF)r   ZtokgentokZsymbols)r   r
   r   parse   s.    
zparse_signature.<locals>.parsez->zundefined output symbols: %sr   )	partitionlistset
difference	NameErrorr   sorted)Zsigr   r"   Zins_ZoutsZinputsZoutputsZisymZosymZgrpZdiffr
   )r   r   parse_signature   s     


r*   )	Z
__future__r   r   r   r   r   Znumbar   r*   r
   r
   r
   r   <module>   s   