U
    :qLe""                     @   sJ   d dl mZ d dlZd dlmZ dZG dd deZG dd dejZdS )    )StringION)Tokenc                   @   s   e Zd Zdd Zdd Zdd Zeddd	Zedd
dZ	e
dddZedddZdd Zdd Zdd Zdd Zdd ZeedddZeeedd d!Zd"S )#IntervalSetc                 C   s   d | _ d| _d S )NF)	intervalsZreadOnlyself r   i/home/p21-0144/sympy/latex2sympy2solve-back-end/sympyEq/lib/python3.8/site-packages/antlr4/IntervalSet.py__init__   s    zIntervalSet.__init__c                 c   s*   | j d k	r&| j D ]}|D ]
}|V  qqd S N)r   )r   icr   r   r	   __iter__   s    

zIntervalSet.__iter__c                 C   s,   d}| D ]}||kr|  S |d7 }qt jS Nr      )r   INVALID_TYPE)r   itemr   kr   r   r	   __getitem__   s    
zIntervalSet.__getitem__)vc                 C   s   |  t||d  d S Nr   )addRangerange)r   r   r   r   r	   addOne#   s    zIntervalSet.addOnec                 C   s   | j d kr t | _ | j | nd}| j D ]}|j|jk rN| j ||  d S |j|jkrtt|j|j| j |<  d S |j|jkrtt|j|jt|j|j| j |< | 	|  d S |d7 }q*| j | d S r   )
r   listappendstopstartinsertr   minmaxreduce)r   r   r   r   r   r   r	   r   &   s"    

$

zIntervalSet.addRange)otherc                 C   s$   |j d k	r |j D ]}| | q| S r   )r   r   )r   r"   r   r   r   r	   addSet?   s    

zIntervalSet.addSet)r   c                 C   s   |t | jd k r| j| }| j|d  }|j|jkrR| j|d  | | n0|j|jkrt|j|j| j|< | j|d  d S r   )lenr   r   popr!   r   r   )r   r   lrr   r   r	   r!   E   s    
zIntervalSet.reducec                 C   s4   t  }|t||d  | jD ]}|| q |S r   )r   r   r   r   removeRange)r   r   r   resultr   r   r   r	   
complementR   s
    
zIntervalSet.complementc                    s*   | j d krdS t fdd| j D S d S )NFc                 3   s   | ]} |kV  qd S r   r   .0r   r   r   r	   	<genexpr>]   s     z+IntervalSet.__contains__.<locals>.<genexpr>)r   any)r   r   r   r-   r	   __contains__Y   s    
zIntervalSet.__contains__c                 C   s   t dd | jD S )Nc                 s   s   | ]}t |V  qd S r   )r$   r+   r   r   r	   r.   `   s     z&IntervalSet.__len__.<locals>.<genexpr>)sumr   r   r   r   r	   __len___   s    zIntervalSet.__len__c                 C   s  |j |jd kr| |j  n| jd k	rd}| jD ]}|j|j krJ d S |j |j kr|j|jk rt|j |j | j|< t|j|j}| j||  d S |j |j kr|j|jkr| j| |d8 }nD|j |jk rt|j |j | j|< n"|j|jk r
t|j|j| j|< |d7 }q4d S )Nr   r   )r   r   	removeOner   r   r   r%   r   r   r   r   xr   r   r	   r(   b   s(    

zIntervalSet.removeRangec                 C   s   | j d k	rd}| j D ]}||jk r( d S ||jkrR||jd krR| j |  d S ||jkrzt|jd |j| j |<  d S ||jd krt|j|jd | j |<  d S ||jd k rt|j|}t|d |j| j |< | j ||  d S |d7 }qd S r   )r   r   r   r%   r   r   r4   r   r   r	   r3   }   s(    



zIntervalSet.removeOne)literalNamessymbolicNamesc              
   C   s   | j d krdS t }t| dkr,|d d}| j D ]4}|D ]*}|sP|d || ||| d}q>q6t| dkr|d | W  5 Q R  S Q R X d S )Nz{}r   {Tz, F})r   r   r$   writeelementNamegetvalue)r   r6   r7   buffirstr   jr   r   r	   toString   s    




zIntervalSet.toString)r6   r7   ac                 C   sX   |t jkrdS |t jkrdS |t|k r<|| dkr<|| S |t|k rP|| S dS d S )Nz<EOF>z	<EPSILON>z	<INVALID>z	<UNKNOWN>)r   EOFEPSILONr$   )r   r6   r7   rA   r   r   r	   r;      s    

zIntervalSet.elementNameN)__name__
__module____qualname__r
   r   r   intr   r   r   r   r#   r!   r*   r0   r2   r(   r3   r   r@   r;   r   r   r   r	   r      s   	r   c                   @   sl   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )TestIntervalSetc                 C   s$   t  }| |j | d|k d S )N   )r   assertIsNoner   assertFalser   sr   r   r	   	testEmpty   s    zTestIntervalSet.testEmptyc                 C   s>   t  }|d | d|k | d|k | d|k d S )NrI         r   r   
assertTruerK   rL   r   r   r	   testOne   s
    
zTestIntervalSet.testOnec                 C   sH   t  }|d |d | d|k | d|k | d|k d S )NrI   (   #   rQ   rL   r   r   r	   testTwo   s    

zTestIntervalSet.testTwoc                 C   sD   t  }|tdd | d|k | d|k | d|k d S )NrI   )   rT   rU   )r   r   r   rR   rL   r   r   r	   	testRange   s
    zTestIntervalSet.testRangec                 C   sf   t  }|tdd |tdd | dt|j | d|k | d|k | d|k d S )NrI       rT   *      rU   r   r   r   assertEqualsr$   r   rR   rK   rL   r   r   r	   testDistinct1   s    zTestIntervalSet.testDistinct1c                 C   sf   t  }|tdd |tdd | dt|j | d|k | d|k | d|k d S )NrT   rZ   rI   rY   r[   rU   r\   rL   r   r   r	   testDistinct2   s    zTestIntervalSet.testDistinct2c                 C   sf   t  }|tdd |tdd | dt|j | d|k | d|k | d|k d S )NrI   $   rW   r   rT   rU   r   r   r   r]   r$   r   rR   rL   r   r   r	   testContiguous1   s    zTestIntervalSet.testContiguous1c                 C   sX   t  }|tdd |tdd | dt|j | d|k | d|k d S )Nr`   rW   rI   r   rT   ra   rL   r   r   r	   testContiguous2   s    zTestIntervalSet.testContiguous2c                 C   sX   t  }|tdd |tdd | dt|j | d|k | d|k d S )NrI   rT   rU   -   r   ,   ra   rL   r   r   r	   testOverlapping1   s    z TestIntervalSet.testOverlapping1c                 C   sX   t  }|tdd |tdd | dt|j | d|k | d|k d S )NrU   rd   rI   rT   r   re   ra   rL   r   r   r	   testOverlapping2   s    z TestIntervalSet.testOverlapping2c                 C   sx   t  }|tdd |tdd |tdd |tdd | d	t|j | d|k | d
|k d S )NrI   rY   rT   rZ   2   4      =   r   <   ra   rL   r   r   r	   testOverlapping3  s    z TestIntervalSet.testOverlapping3c                 C   s^   t  }|tdd |dd}| d|k | d|k | d|k | d|k d S )N
      r   d   rj   )r   r   r   r*   rR   )r   rM   r   r   r   r	   testComplement  s    zTestIntervalSet.testComplementN)rD   rE   rF   rN   rS   rV   rX   r^   r_   rb   rc   rf   rg   rm   rq   r   r   r   r	   rH      s   			
rH   )	ior   unittestantlr4.Tokenr   r   objectTestCaserH   r   r   r   r	   <module>   s    *