B
    d                 @   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	   ]/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/matplotlib/hatch.pyr   	   s   r   c               @   s   e Zd Zdd Zdd ZdS )HorizontalHatchc             C   s.   t |d|d | | _| jd | _d S )N-+   )intcount	num_linesnum_vertices)selfhatchdensityr	   r	   r
   __init__   s    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 )
Ng        g      ?FT)retstepg       @r   r      )nplinspacer   r   MOVETOLINETO)r   verticescodesstepsstepsizer	   r	   r
   set_vertices_and_codes   s    z&HorizontalHatch.set_vertices_and_codesN)r   r   r   r   r!   r	   r	   r	   r
   r      s   r   c               @   s   e Zd Zdd Zdd ZdS )VerticalHatchc             C   s.   t |d|d | | _| jd | _d S )N|r   r   )r   r   r   r   )r   r   r   r	   r	   r
   r       s    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 )
Ng        g      ?FT)r   g       @r   r   r   )r   r   r   r   r   r   )r   r   r   r   r    r	   r	   r
   r!   $   s    z$VerticalHatch.set_vertices_and_codesN)r   r   r   r   r!   r	   r	   r	   r
   r"      s   r"   c               @   s   e Zd Zdd Zdd ZdS )NorthEastHatchc             C   sJ   t |d|d |d | | _| jr@| jd d | _nd| _d S )N/xXr   r   r   )r   r   r   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   g        r   r   g      ?)r   r   r   r   r   r   )r   r   r   r   r	   r	   r
   r!   9   s    z%NorthEastHatch.set_vertices_and_codesN)r   r   r   r   r!   r	   r	   r	   r
   r$   0   s   r$   c               @   s   e Zd Zdd Zdd ZdS )SouthEastHatchc             C   sJ   t |d|d |d | | _| jr@| jd d | _nd| _d S )N\r&   r'   r   r   r   )r   r   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 )Ng      g      ?r   g        r   r   g      ?)r   r   r   r   r   r   )r   r   r   r   r	   r	   r
   r!   M   s    z%SouthEastHatch.set_vertices_and_codesN)r   r   r   r   r!   r	   r	   r	   r
   r(   C   s   	r(   c               @   s    e Zd ZdZdd Zdd ZdS )ShapesFc             C   sf   | j dkrd| _d| _nJ| j d d | j d  | j d | j   | _| jt| j | jrZdnd | _d S )Nr   r   r   )num_rowsZ
num_shapesr   lenshape_verticesfilled)r   r   r   r	   r	   r
   r   Z   s    
zShapes.__init__c             C   s   d| j  }| j| | j }| j}| jsPt||d d d d g}t||g}g }g }xt| j d D ]t}|d dkrtdd| j d }	nt|d d|d  | j }	|| }
x(|	D ] }|	|||
g  |	| qW qhW tj||d tj||d d S )Ng      ?g?r   r   r   )out)
r+   r-   sizeshape_codesr.   r   Zconcatenateranger   append)r   r   r   offsetr-   r2   Zvertices_partsZcodes_partsrowcolsZrow_posZ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   Zunit_circler   r-   r   r2   superr   )r   r   r   path)	__class__r	   r
   r   }   s    zCircles.__init__)r   r   r   r   __classcell__r	   r	   )r;   r
   r8   |   s   r8   c                   s    e Zd ZdZ fddZ  ZS )SmallCirclesg?c                s"   | d| | _t || d S )No)r   r+   r9   r   )r   r   r   )r;   r	   r
   r      s    zSmallCircles.__init__)r   r   r   r1   r   r<   r	   r	   )r;   r
   r=      s   r=   c                   s    e Zd ZdZ fddZ  ZS )LargeCirclesgffffff?c                s"   | d| | _t || d S )NO)r   r+   r9   r   )r   r   r   )r;   r	   r
   r      s    zLargeCircles.__init__)r   r   r   r1   r   r<   r	   r	   )r;   r
   r?      s   r?   c                   s$   e Zd ZdZdZ fddZ  ZS )SmallFilledCirclesg?Tc                s"   | d| | _t || d S )N.)r   r+   r9   r   )r   r   r   )r;   r	   r
   r      s    zSmallFilledCircles.__init__)r   r   r   r1   r.   r   r<   r	   r	   )r;   r
   rA      s   rA   c                   s$   e Zd ZdZdZ fddZ  ZS )StarsgUUUUUU?Tc                s\   | d| | _td}|j| _tjt| jtj	tj
d| _tj| jd< t || d S )N*   )Zdtyper   )r   r+   r   Zunit_regular_starr   r-   r   fullr,   r   	code_typer2   r   r9   r   )r   r   r   r:   )r;   r	   r
   r      s    
zStars.__init__)r   r   r   r1   r.   r   r<   r	   r	   )r;   r
   rC      s   rC   c             C   s`   t d}| d k	r\t | |}|r\dt|}dt|}tjddd| d| dd d S )	Nz-+|/\xXoO.* z3.4z3.7z#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 %(removal)s.)Zremovalmessage)set
differencejoinsortedr   Zwarn_deprecated)r   Zvalid_hatch_patternsZinvalidsZvalidr	   r	   r
   _validate_hatch_pattern   s    rN      c       
         s   t    fddtD }tdd |D }|dkrDttdS t|df}t|tj}d}xP|D ]H}|jdkrj||||j  }||||j  }	|||	 ||j7 }qjW t||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	   ).0Z
hatch_type)r   hatchpatternr	   r
   
<listcomp>   s   zget_path.<locals>.<listcomp>c             S   s   g | ]
}|j qS r	   )r   )rP   patternr	   r	   r
   rR      s    r   )r   r   r   )	r   _hatch_typessumr   r   emptyrG   r   r!   )
rQ   r   patternsr   r   r   cursorrS   Zvertices_chunkZcodes_chunkr	   )r   rQ   r
   get_path   s     

rY   )rO   )r   numpyr   Z
matplotlibr   Zmatplotlib.pathr   r   r   r"   r$   r(   r*   r8   r=   r?   rA   rC   rT   rN   rY   r	   r	   r	   r
   <module>   s0   %	