U
    ,‰d6  ã                   @   s   d dl Z d dlZdd„ ZdS )é    Nc                    s¬   dd„ }dd„ ‰ ‡ fdd„}|| ƒ  d¡\}}}t||ƒƒ}t||ƒƒ}tƒ }tƒ }	|D ]}
|t|
ƒO }qX|D ]}
|	t|
ƒO }	qn|	 |¡}|r¤tdd	 t|ƒ¡ ƒ‚||fS )
z‹Parse 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)ÚstringÚ
whitespace)Ú.0Úc© r   ú;/tmp/pip-unpacked-wheel-eu7e0c37/numba/np/ufunc/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 r   r   r   )Úsrcr   r	   Úreadline   s    z4parse_signature.<locals>.tokenizer.<locals>.readlinec                      s   t ˆ ƒS r   )Únextr   )Úgenr   r	   Ú<lambda>   ó    z4parse_signature.<locals>.tokenizer.<locals>.<lambda>)ÚtokenizeÚgenerate_tokens)r   r   r   )r   r   r	   Ú	tokenizer   s    z"parse_signature.<locals>.tokenizerc                 3   sÔ   ˆ | ƒ}t |ƒ}|d dkr¬g }t |ƒ}|d dkr8qxq |d tjkrV| |d ¡ q |d dkrfq q td|d  ƒ‚q t|ƒV  t |ƒ}|d dkršqqÎt |d ¡rÎqÐqt |d ¡r¾qÐqtd|d  ƒ‚qd S )Né   ú(ú)r   ú,zbad token in signature "%s")r   r   ÚNAMEÚappendÚ
ValueErrorÚtupleÚISEOF)r   ZtokgenÚtokÚsymbols©r   r   r	   Úparse   s*    
zparse_signature.<locals>.parsez->zundefined output symbols: %sr   )Ú	partitionÚlistÚsetÚ
differenceÚ	NameErrorr   Úsorted)Úsigr   r#   ZinsÚ_ZoutsÚinputsÚoutputsZisymZosymÚgrpZdiffr   r"   r	   Úparse_signature   s     
r/   )r   r   r/   r   r   r   r	   Ú<module>   s   