o
    oh7                     @   sB   d dl mZ d dlmZ d dlmZ d dlmZ G dd dZdS )    )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 {/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-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   s_eval_errorf_errorr   r   r   __init__   s:   
&zPlotInterval.__init__c                 C      | j S N)r   r   r   r   r   get_v2      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_v5   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_maxJ   r.   zPlotInterval.get_v_maxc                 C   r1   )Nz+v_max could not be interpreted as a number.)r	   r   r2   r3   r   r   )r   r%   r   r   r   	set_v_maxM   r5   zPlotInterval.set_v_maxc                 C   r*   r+   )r
   r,   r   r   r   get_v_stepsW   r.   zPlotInterval.get_v_stepsc                 C   sT   |d u r	d | _ d S t|trt|}n	t|tstd|tjkr%td|| _ d S )Nz(v_steps must be an int or SymPy Integer.zv_steps must be positive.)r
   r   intr   r   r   Zero)r   r&   r   r   r   set_v_stepsZ   s   




zPlotInterval.set_v_stepsc                 C   s
   | j d S )Nr   )r&   r,   r   r   r   	get_v_lenf   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   p   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_parsez   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)rA   r,   r   r   r   __repr__      zPlotInterval.__repr__c                 C   rB   )zB
        A string representing the interval in list form.
        z[%s]rC   r,   r   r   r   __str__   rE   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j  }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   N)r%   r$   r&   r   r:   rH   r   )r   rI   rK   rJ   r=   r   r   r   vrange2   s   
zPlotInterval.vrange2c                 c   s"    |   D ]	}t| V  qd S r+   )rL   r2   r3   )r   rJ   r   r   r   frange   s   zPlotInterval.frangeN)#__name__
__module____qualname____doc__r   r   r	   r
   r   r)   r-   r/   r0   r4   r6   r7   r8   r;   r<   propertyr#   r$   r%   r&   v_lenr   staticmethodr>   rA   rD   rF   rG   rL   rM   rN   r   r   r   r   r      sB    








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

r   N)	sympy.core.singletonr   sympy.core.symbolr   sympy.core.sympifyr   sympy.core.numbersr   r   r   r   r   r   <module>   s
    