B
    [3                 @   s  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 d dlmZmZ d dlmZ d dl mZmZmZmZmZ d dlm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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 )    )IntervalIntersectionSetEmptySet	FiniteSetUnionComplexRegion
ProductSet)IntegersNaturalsRealsRangeImageSet)UniversalSetimageset)ConditionSet)SsympifyDummyLambdasymbols)dispatchc             C   s   d S )N )abr   r   ?lib/python3.7/site-packages/sympy/sets/handlers/intersection.pyintersection_sets
   s    r   c             C   s   t | j| jt| j|S )N)r   ZsymZ	conditionr   base_set)r   r   r   r   r   r      s    c             C   s   t tj|t| jtjS )N)r   r   r
   r   _infInfinity)r   r   r   r   r   r      s    c             C   s
   t || S )N)r   )r   r   r   r   r   r      s    c             C   sP   ddl m}m} |jtjkr,|jtjkr,| S t||j	||j
d }t||S )Nr   )floorceiling   )#sympy.functions.elementary.integersr    r!   r   r   NegativeInfinityZ_supr   r   leftrightr   )r   r   r    r!   sr   r   r   r      s
    c             C   s  |j r| js$|js$tt| j|jS | jr|jr| j| j }}|j|j }}t||}t||}dtj |krxtj	|ksdtj |krtj	|krt
|td}t|| ddS |tjrg }tdtdd}	| jsx.| jD ]$}
tj	|
jd kr||
jd  qW t
| }t||S | jrx| jD ]x}
tj	|
jd krN||
jd  tj|
jd kr~|tt|	|	 |
jd  tj	|
jd kr(|td q(W t
| }t||S d S )N   r   T)polarx)clsrealr"   )Zis_ComplexRegionr)   r   r   setsZ
a_intervalZ
b_intervalr   ZPiZZeror   r   	is_subsetr   r   r   Zpsetsargsappendr   r   )selfotherr1Ztheta1r2Ztheta2Znew_r_intervalZnew_theta_intervalnew_intervalr*   elementr   r   r   r   "   sB    



c             C   s   | S )Nr   )r   r   r   r   r   r   Q   s    c             C   s   ddl m}m} ddlm}m} tdd |jd d D s@d S | jdkrPt	j
S |t|j| j}||krr|d7 }|t|j| j}||kr|d8 }t| t||d S )Nr   )r    r!   )MinMaxc             s   s   | ]}|j V  qd S )N)Z	is_number).0ir   r   r   	<genexpr>Y   s    z$intersection_sets.<locals>.<genexpr>r(   r"   )r#   r    r!   Z(sympy.functions.elementary.miscellaneousr7   r8   allr/   sizer   r   maxinfminsupr   r   )r   r   r    r!   r7   r8   startendr   r   r   r   U   s    
c             C   s   t | tdtjS )Nr"   )r   r   r   r   )r   r   r   r   r   r   j   s    c             C   s
   t || S )N)r   )r   r   r   r   r   r   n   s    c                s  ddl m} ddlm} ddlm  |s.tjS | s8tjS |j| j	k rJtjS |j	| jkr\tjS | }|j
jrn|j}|}|j
jr|j}dd }|||t ||t  \}}|d ko|d k}	|	rtjS | d }
|||
} fdd}t||j|j|||}|d krtjS |||}|d kr,tjS  fd	d
}|| |}|||} |jdk rd|j} |jdk rz|j}t|j
|j
}t|j|j}t||S )Nr   )diop_linear)ilcm)signc             S   s   | j || j  S )N)rB   step)rr:   r   r   r   <lambda>   s    z#intersection_sets.<locals>.<lambda>c                sl   || j kr|S  | j |  }t|| j | |d }|| j krBn | j |kr\||8 }|| krhd S |S )N)rB   r   rG   )r3   csts1)rF   rG   r   r   _first_finite_point   s    

z.intersection_sets.<locals>._first_finite_pointc                s<    | j  }| jjr&t|| j|}nt| j|| |}|S )N)rG   rB   Z	is_finiter   stop)rH   firstrL   rv)rF   rG   r   r   _updated_range   s
    z)intersection_sets.<locals>._updated_range)sympy.solvers.diophantinerD   Zsympy.core.numbersrE   sympyrF   r   r   rA   r?   rB   Zis_infinitereversedr   Zas_coeff_AddabsrG   r>   r@   rO   r   )r   r   rD   rE   r3   r4   eqZvaZvbZno_solutionZa0rK   rN   rM   s2rR   rB   rO   r   )rF   rG   r   r   r   sT     






c             C   s   | S )Nr   )r   r   r   r   r   r      s    c       #   
   C   s  ddl m} | jtjkrd }t|trJ|jtjkrJ|jj}|jj	d }n|tjkr`t
d }}|d k	r| jj}| jj	d }t
dt
d }}|||||| }}||| }	|	t krt S t||| }
t|
dkrd S |
d d }|j }tt||||||tjS |tjkrddlm} ddlm} t| jj	dkrXd S | jj}| jj	d }t
|jd	d
}|||}| \}}||}tt||| j|||S t|trddlm}m}m} | jj}| jj	d }| j}d\}}|j |j! }}|j"r|}n|}|||j#|\}}|||j$|\}}t%dd ||fD r||krxt|dkrx|j&d }||krt|dkr|j&d }t'dd ||fD rd S tj} t%dd ||fD r||kr|| }}t||||}!||!} n<|(tjr>|||tj}"t| tt)fs:|"|} nd S | tjkrPtjS t| t*rv| j+tj,k	rvt-t|  } | d k	rtt||| S d S d S d S )Nr   )diophantiner*   r   r   r"   )solveset_real)expand_complexT)r,   )invert_realinvert_complexsolveset)NNc             s   s   | ]}t |tV  qd S )N)
isinstancer   )r9   r:   r   r   r   r;   &  s    z$intersection_sets.<locals>.<genexpr>c             s   s   | ]}|d kV  qd S )Nr   )r9   r:   r   r   r   r;   1  s    c             s   s   | ]}|j V  qd S )N)is_real)r9   r:   r   r   r   r;   7  s    ).rS   rY   r   r   r
   r_   r   ZlamdaexprZ	variablesr   Zsubssetr   listlenZfree_symbolspopr   r   r   Zsympy.solvers.solvesetrZ   Zsympy.core.functionr[   nameZas_real_imag	intersectr   r\   r]   r^   	left_open
right_openr`   r?   rA   r<   r/   anyr.   r   r   r=   r   r   )#r1   r2   rY   gmfnr   r   Z	solns_setZsolnsZnsoltrZ   r[   Zn_Zf_reZimr\   r]   r^   r   Znew_infZnew_supZ	new_lopenZ	new_ropenZinverterZg1Zh1Zg2Zh2Z	range_setr5   Z	solutionsr   r   r   r      s    



"







c             C   s6   t |jt | jkrtjS tdd t| j|jD S )Nc             s   s   | ]\}}| |V  qd S )N)rg   )r9   r:   jr   r   r   r;   V  s   z$intersection_sets.<locals>.<genexpr>)rd   r/   r   r   r	   zipr-   )r   r   r   r   r   r   R  s    c       
      C   s@  t jt jf}| t| krF| j| j }}|jsB||ksB|jsB||krF|S | |sTd S d}| j|j	kr"|j| j	kr"| j|jk r|j}|j
}n,| j|jkr| j}| j
}n| j}| j
p|j
}| j	|j	k r| j	}| j}	n.| j	|j	kr|j	}|j}	n| j	}| jp |j}	|| dkr&|s|	r&d}nd}|r2t jS t||||	S )NFr   T)r   r$   r   r   r%   r&   r`   Z_is_comparablerB   rC   rh   ri   r   )
r   r   ZinftylrH   emptyrB   rh   rC   ri   r   r   r   r   Y  s>    
c             C   s   t jS )N)r   r   )r   r   r   r   r   r     s    c             C   s   |S )Nr   )r   r   r   r   r   r     s    c             C   s   t | j|j@  S )N)r   Z	_elements)r   r   r   r   r   r     s    c                s0   yt  fdd| D  S  tk
r*   d S X d S )Nc                s   g | ]}| kr|qS r   r   )r9   Zel)r   r   r   
<listcomp>  s    z%intersection_sets.<locals>.<listcomp>)r   	TypeError)r   r   r   )r   r   r     s    c             C   s   d S )Nr   )r   r   r   r   r   r     s    N)rT   r   r   r   r   r   r   r   r	   Zsympy.sets.fancysetsr
   r   r   r   r   Zsympy.sets.setsr   r   Zsympy.sets.conditionsetr   r   r   r   r   r   Zsympy.multipledispatchr   r   r   r   r   r   <module>   s2   (/jq/