o
    8Va                     @   s.   d dl mZmZ d dlmZ G dd dZdS )    )Symbolsympify)Integerc                   @   s   e Zd ZdZd\ZZZ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edd Zee
eZeeeZeeeZeeeZeeZdd Zedd Zdd Zdd  Zd!d" Zed#d$ Zed%d& Z ed'd( Z!d)d* Z"d+S ),PlotIntervalz
    )NNNNc                    s    fdd}|S )Nc                    s@   | j | j| j| jfD ]
}|d u rtdq
 | g|R i |S )NzPlotInterval is incomplete.)_v_v_min_v_max_v_steps
ValueError)selfargskwargsgf I/usr/lib/python3/dist-packages/sympy/plotting/pygletplot/plot_interval.pycheck   s
   z,PlotInterval.require_all_args.<locals>.checkr   )r   r   r   r   r   require_all_args
   s   zPlotInterval.require_all_argsc                 G   sV  t |dkrIt|d tr| |d  d S t|d tr7zt|d }W n# ty6   d}t||d  w t|d tt	frE|d }ntdt|tt	frVt |dkr\d}t|t	|}t |dkry|d d u sst|d t
ry|d| _t |dv r|d| _|d| _t |dkr|d| _d S d S t |dkr|d| _d S d S )N   r   zCould not interpret string %s.zNot an interval.   z9PlotInterval must be a tuple or list of length 4 or less.)      )len
isinstancer   	fill_fromstreval	TypeErrorr
   tuplelistr   popvv_minv_maxv_steps)r   r   Zs_eval_errorZf_errorr   r   r   __init__   s:   
&zPlotInterval.__init__c                 C      | j S N)r   r   r   r   r   get_v0      zPlotInterval.get_vc                 C   s.   |d u r	d | _ d S t|tstd|| _ d S )Nzv must be a sympy Symbol.)r   r   r   r
   )r   r"   r   r   r   set_v3   s   

zPlotInterval.set_vc                 C   r'   r(   )r   r)   r   r   r   	get_v_min;   r+   zPlotInterval.get_v_minc                 C   H   |d u r	d | _ d S zt|| _ t| j   W d S  ty#   tdw )Nz+v_min could not be interpreted as a number.)r   r   floatevalfr   r
   )r   r#   r   r   r   	set_v_min>      
zPlotInterval.set_v_minc                 C   r'   r(   )r   r)   r   r   r   	get_v_maxH   r+   zPlotInterval.get_v_maxc                 C   r.   )Nz+v_max could not be interpreted as a number.)r   r   r/   r0   r   r
   )r   r$   r   r   r   	set_v_maxK   r2   zPlotInterval.set_v_maxc                 C   r'   r(   )r	   r)   r   r   r   get_v_stepsU   r+   zPlotInterval.get_v_stepsc                 C   sV   |d u r	d | _ d S t|trt|}n	t|tstd|tdkr&td|| _ d S )Nz(v_steps must be an int or sympy Integer.r   zv_steps must be positive.)r	   r   intr   r
   )r   r%   r   r   r   set_v_stepsX   s   



zPlotInterval.set_v_stepsc                 C   s
   | j d S )Nr   )r%   r)   r   r   r   	get_v_lend   s   
zPlotInterval.get_v_lenc                 C   sP   |j d ur	|j | _ |jd ur|j| _|jd ur|j| _|jd ur&|j| _d S d S r(   )r"   r#   r$   r%   )r   br   r   r   r   n   s   



zPlotInterval.fill_fromc                  G   sB   t | dkrt| d tr| d S zt|  W S  ty    Y dS w )zd
        Returns a PlotInterval if args can be interpreted
        as such, otherwise None.
        r   r   N)r   r   r   r
   )r   r   r   r   	try_parsex   s   
zPlotInterval.try_parsec                 C   s*   d t| jt| jt| jt| jgS )N,)joinr   r"   r#   r$   r%   r)   r   r   r   	_str_base   s   zPlotInterval._str_basec                 C      d|    S )zO
        A string representing the interval in class constructor form.
        zPlotInterval(%s)r=   r)   r   r   r   __repr__      zPlotInterval.__repr__c                 C   r>   )zB
        A string representing the interval in list form.
        z[%s]r?   r)   r   r   r   __str__   rA   zPlotInterval.__str__c                 C   s   d S r(   r   r)   r   r   r   assert_complete   s   zPlotInterval.assert_completec                 c   sD    | j | j | j }t| jd D ]}| j|t|  }|V  qdS )zU
        Yields v_steps+1 sympy numbers ranging from
        v_min to v_max.
        r   N)r$   r#   r%   ranger   )r   diar   r   r   vrange   s   zPlotInterval.vrangec                 c   s^    | j | j | j }| j|td  }t| jD ]}| j|t|d   }||fV  |}qdS )z|
        Yields v_steps pairs of sympy numbers ranging from
        (v_min, v_min + step) to (v_max - step, v_max).
        r   r   N)r$   r#   r%   r   rD   )r   rE   rG   rF   r9   r   r   r   vrange2   s   
zPlotInterval.vrange2c                 c   s"    |   D ]	}t| V  qd S r(   )rH   r/   r0   )r   rF   r   r   r   frange   s   zPlotInterval.frangeN)#__name__
__module____qualname____doc__r   r   r   r	   r   r&   r*   r,   r-   r1   r3   r4   r5   r7   r8   propertyr"   r#   r$   r%   Zv_lenr   staticmethodr:   r=   r@   rB   rC   rH   rI   rJ   r   r   r   r   r      sB    












r   N)Zsympyr   r   Zsympy.core.numbersr   r   r   r   r   r   <module>   s    