B
    [                  @   s  d dl mZmZ d dlmZmZmZmZmZm	Z	m
Z
mZ d dlmZmZmZmZmZmZmZmZmZ d dlmZmZmZmZmZmZmZmZmZ d dl m!Z!m"Z" d dl#m$Z$ d dl m%Z% d dl&m'Z'm(Z(m)Z)m*Z*m+Z+ ed	\Z,Z-e%e!fZ.ee%ed
d Z/ee.edd Z/ee!edd Z/ee%edd Z/ee.edd Z/ee.edd Z/ee.edd Z/ee.edd Z/ee.edd Z/ee.e$dd Z/dS )    )dispatch
Dispatcher)BasicExprFunctionAddMulPowDummyInteger)	MinMaxSetsympifysymbolsexplogSWild)	imagesetInterval	FiniteSetUnionImageSet
ProductSetEmptySetIntersectionRange)Lambda_coeff_isneg)Integers)FunctionClass)AndOrNottruefalsezx yc             C   s   d S )N )fxr'   r'   <lib/python3.7/site-packages/sympy/sets/handlers/functions.py_set_function   s    r+   c             C   s   t t| | S )N)r   map)r(   r)   r'   r'   r*   r+      s    c                s  ddl m}m} ddlm} ddlm}m} ddlm	} ddl
m} ddlm}	  j}
t|
jdksrt jdkrvd S  jd }|
jrtj}}xn|
jD ]d\}}|tkr|}n| }t||}|jrt|}nt||||}t||}|	||}|jrP qW |S jjrj jsd S yfd	d
||
|D W n t!k
rP   d S X j"rn||
|jdd}njkr j}j#r||
|j dd}nj kr j }tdkrt$|||
||}||g fdd
|D  }|| ||  }}d\}}||krN||kr2||kr2j"}||kr||krj#}n4||krh||krhj#}||kr||krj"}t%||||S t t%jd j"dt fdd
t&dtd D   t t%d j dj# S d S )Nr   )r   r   )solveset)diffr   )limit)singularities)
Complement   c                s   g | ]}|j r| kr|qS r'   )is_real).0i)r)   r'   r*   
<listcomp>C   s    z!_set_function.<locals>.<listcomp>+)dir-c                s"   g | ]}|j r|kr |qS r'   )r3   )r4   r5   )r(   r)   r'   r*   r6   T   s    )FFTc          	      s,   g | ]$}t  t| |d   ddqS )r2   T)r   r   )r4   r5   )r(   singr'   r*   r6   k   s   )'Z(sympy.functions.elementary.miscellaneousr   r   Zsympy.solvers.solvesetr-   sympy.core.functionr.   r   Zsympy.seriesr/   Zsympy.calculus.singularitiesr0   
sympy.setsr1   exprlenfree_symbols	variablesZis_Piecewiser   r   argsr%   Zas_setr   Z	is_Numberr   r   r   Zis_EmptySetstartZis_comparableendNotImplementedError	left_open
right_openlistr   range)r(   r)   r   r   r-   r.   r   r/   r0   r1   r>   varresultZ
domain_setZp_exprZp_condZintrvlZimageZ_startZ_endZsolnsZextrrC   rD   rF   rG   r'   )r(   r:   r)   r*   r+      sr    







@c             C   s`   | t kr&tt |jt |j|j|jS | tkrLtt|jt|j|j|jS ttt	| t	|S )N)
r   r   rC   rD   rF   rG   r   r   r   _x)r(   r)   r'   r'   r*   r+   o   s
    c                s   t  fdd|jD S )Nc             3   s   | ]}t  |V  qd S )N)r   )r4   arg)r(   r'   r*   	<genexpr>y   s    z _set_function.<locals>.<genexpr>)r   rB   )r(   r)   r'   )r(   r*   r+   w   s    c                sF   ddl m} | |r.t fdd|jD S ttt t|S d S )Nr   )is_function_invertible_in_setc             3   s   | ]}t  |V  qd S )N)r   )r4   rM   )r(   r'   r*   rN      s    z _set_function.<locals>.<genexpr>)Zsympy.sets.setsrO   r   rB   r   r   rL   )r(   r)   rO   r'   )r(   r*   r+   {   s    
c             C   s   |S )Nr'   )r(   r)   r'   r'   r*   r+      s    c             C   s   t tt| t|S )N)r   r   rL   )r(   r)   r'   r'   r*   r+      s    c             C   s   ddl m} |stjS t| jts&d S |jdkr@t| |d S | tj	krN|S | j
d }| j}||jksx|||jkr|d S |jjr| |j| |j }n| |j | |d  }||}||krt||t|jS d S )Nr   )
expand_mulr2   r;   )r<   rP   r   r   
isinstancer>   r   sizer   ZIdentityFunctionrA   r@   r.   rC   Z	is_finitestepr   r   )r(   selfrP   r)   r>   Fr'   r'   r*   r+      s&    


c             C   s   | j }t|tsd S t| jdkr&d S | jd }| d}| || }| | | }dd }||||k rr|| }td|gd}td|gd}	||| |	 }
|
r|
| r|
| | |
|	 |
|   }|| j krtt||t	j
S d S )Nr2   r   c             S   s   t dd t| D S )Nc             s   s   | ]}t |V  qd S )N)r   )r4   _r'   r'   r*   rN      s    z2_set_function.<locals>.<lambda>.<locals>.<genexpr>)sumr   Z	make_args)er'   r'   r*   <lambda>   s    z_set_function.<locals>.<lambda>a)Zexcludeb)r>   rQ   r   r?   rA   r   matchr   r   r   r    )r(   rT   r>   ncZfxZf_xZ	neg_countrZ   r[   r\   r'   r'   r*   r+      s&    


N)0Zsympy.multipledispatchr   r   Z
sympy.corer   r   r   r   r   r	   r
   r   Zsympyr   r   r   r   r   r   r   r   r   r=   r   r   r   r   r   r   r   r   r   r<   r   r   Zsympy.sets.fancysetsr    r!   Zsympy.logic.boolalgr"   r#   r$   r%   r&   rL   Z_yZFunctionUnionr+   r'   r'   r'   r*   <module>   s&   (,,V	