o
    h                     @   s   d Z ddlZddlmZ ddlmZ G dd dZG dd deZG d	d
 d
eZ	G dd deZ
G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZee	e
eeeeegZdd Zd ddZdS )!z/Contains classes for generating hatch patterns.    N)_api)Pathc                   @   s   e Zd ZdZdS )HatchPatternBasez#The base class for a hatch pattern.N)__name__
__module____qualname____doc__ r	   r	   d/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/matplotlib/hatch.pyr   	   s    r   c                   @      e Zd Zdd Zdd ZdS )HorizontalHatchc                 C   .   t |d|d | | _| jd | _d S )N-+   intcount	num_linesnum_verticesselfhatchdensityr	   r	   r
   __init__      zHorizontalHatch.__init__c                 C   s   t jdd| jddd\}}||d 7 }d|dd ddf< ||dd dd	f< d|d	d ddf< ||d	d dd	f< tj|dd d< tj|d	d d< d S 
N              ?FT)retstepg       @r   r      nplinspacer   r   MOVETOLINETOr   verticescodesstepsstepsizer	   r	   r
   set_vertices_and_codes      
z&HorizontalHatch.set_vertices_and_codesNr   r   r   r   r+   r	   r	   r	   r
   r          r   c                   @   r   )VerticalHatchc                 C   r   )N|r   r   r   r   r	   r	   r
   r       r   zVerticalHatch.__init__c                 C   s   t jdd| jddd\}}||d 7 }||dd ddf< d|dd dd	f< ||d	d ddf< d|d	d dd	f< tj|dd d< tj|d	d d< d S r   r!   r&   r	   r	   r
   r+   $   r,   z$VerticalHatch.set_vertices_and_codesNr-   r	   r	   r	   r
   r/      r.   r/   c                   @   r   )NorthEastHatchc                 C   L   t |d|d |d | | _| jr!| jd d | _d S d| _d S )N/xXr    r   r   r   r   r	   r	   r
   r   1   s    
zNorthEastHatch.__init__c                 C   s   t dd| jd }d| |dd ddf< d| |dd ddf< d| |dd ddf< d| |dd ddf< tj|dd d< tj|dd d< d S Ng      g      ?r    r   r   r   r   r!   r   r'   r(   r)   r	   r	   r
   r+   9      z%NorthEastHatch.set_vertices_and_codesNr-   r	   r	   r	   r
   r1   0   s    r1   c                   @   r   )SouthEastHatchc                 C   r2   )N\r4   r5   r    r   r   r   r   r	   r	   r
   r   D   s   
zSouthEastHatch.__init__c                 C   s   t dd| jd }d| |dd ddf< d| |dd ddf< d| |dd ddf< d| |dd ddf< tj|dd d< tj|dd d< d S r6   r!   r7   r	   r	   r
   r+   M   r8   z%SouthEastHatch.set_vertices_and_codesNr-   r	   r	   r	   r
   r9   C   s    	r9   c                   @   s    e Zd ZdZdd Zdd ZdS )ShapesFc                 C   sh   | j dkrd| _d| _d S | j d d | j d  | j d | j   | _| jt| j | jr.dnd | _d S )Nr   r   r    )num_rows
num_shapesr   lenshape_verticesfilledr   r	   r	   r
   r   Z   s   


zShapes.__init__c                 C   s   d| j  }| j| | j }| j}| js(t||d d d d g}t||g}g }g }t| j d D ]8}|d dkrFtdd| j d }	nt|d d|d  | j }	|| }
|	D ]}|	|||
g  |	| qZq3tj||d tj||d d S )Nr   g?r    r   r   )out)
r<   r?   sizeshape_codesr@   r"   concatenateranger#   append)r   r'   r(   offsetr?   rD   vertices_partscodes_partsrowcolsrow_poscol_posr	   r	   r
   r+   e   s*   
zShapes.set_vertices_and_codesN)r   r   r   r@   r   r+   r	   r	   r	   r
   r;   W   s    r;   c                       s   e Zd Z fddZ  ZS )Circlesc                    s*   t  }|j| _|j| _t || d S )N)r   unit_circler'   r?   r(   rD   superr   r   r   r   path	__class__r	   r
   r   }   s   zCircles.__init__)r   r   r   r   __classcell__r	   r	   rT   r
   rO   |   s    rO   c                           e Zd ZdZ fddZ  ZS )SmallCirclesg?c                    "   | d| | _t || d S )Nor   r<   rQ   r   r   rT   r	   r
   r         zSmallCircles.__init__r   r   r   rC   r   rV   r	   r	   rT   r
   rX          rX   c                       rW   )LargeCirclesgffffff?c                    rY   )NOr[   r   rT   r	   r
   r      r\   zLargeCircles.__init__r]   r	   r	   rT   r
   r_      r^   r_   c                       $   e Zd ZdZdZ fddZ  ZS )SmallFilledCirclesg?Tc                    rY   )N.r[   r   rT   r	   r
   r      r\   zSmallFilledCircles.__init__r   r   r   rC   r@   r   rV   r	   r	   rT   r
   rb          rb   c                       ra   )StarsgUUUUUU?Tc                    s\   | d| | _td}|j| _tjt| jtj	tj
d| _tj| jd< t || d S )N*   )dtyper   )r   r<   r   unit_regular_starr'   r?   r"   fullr>   r%   	code_typerD   r$   rQ   r   rR   rT   r	   r
   r      s   
zStars.__init__rd   r	   r	   rT   r
   rf      re   rf   c                 C   sh   t d}| d ur0t | |}|r2dt|}dt|}tjddd| d| dd d S d S d S )	Nz-+|/\xXoO.* z3.4z3.11z#hatch must consist of a string of "z3" or None, but found the following invalid values "z`". Passing invalid values is deprecated since %(since)s and will become an error in %(removal)s.)removalmessage)set
differencejoinsortedr   warn_deprecated)r   valid_hatch_patternsinvalidsvalidr	   r	   r
   _validate_hatch_pattern   s   
rx      c           
         s   t    fddtD }tdd |D }|dkr"ttdS t|df}t|tj}d}|D ]$}|jdkrX||||j  }||||j  }	|||	 ||j7 }q4t||S )z
    Given a hatch specifier, *hatchpattern*, generates Path to render
    the hatch in a unit square.  *density* is the number of lines per
    unit square.
    c                    s   g | ]}| qS r	   r	   ).0
hatch_typer   hatchpatternr	   r
   
<listcomp>   s    zget_path.<locals>.<listcomp>c                 S   s   g | ]}|j qS r	   )r   )rz   patternr	   r	   r
   r~      s    r   )r   r   r   )	r   _hatch_typessumr   r"   emptyrl   r   r+   )
r}   r   patternsr   r'   r(   cursorr   vertices_chunkcodes_chunkr	   r|   r
   get_path   s$   


r   )ry   )r   numpyr"   
matplotlibr   matplotlib.pathr   r   r   r/   r1   r9   r;   rO   rX   r_   rb   rf   r   rx   r   r	   r	   r	   r
   <module>   s4    %	