U
    DvfF                     @   s   d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlZddlZddlZeeZdd	d
Zdd ZdddZdd Zdd Zdd Zdd Zdd Zdd Zd ddZedkrddlZee  dS )!z;Visualize DesignSpaceDocument and resulting VariationModel.    )VariationModelsupportScalar)DesignSpaceDocument)pyplot)axes3d)cycleN
   c                    sD   | \  fddt D fddt D  g S )Nc                    s    g | ]}   |   qS  r	   .0i)abcountr	   9/tmp/pip-unpacked-wheel-qlge9rch/fontTools/varLib/plot.py
<listcomp>   s     zstops.<locals>.<listcomp>c                    s    g | ]}   |   qS r	   r	   r
   )r   cr   r	   r   r      s     )range)supportr   r	   )r   r   r   r   r   stops   s    
r   c                 K   s   t | ttjjjD ]\}}t|dkrT|j||d dgdgdfd|i| qt|dkr|j||d dg||d dgdgdfd|i| qt	t|qd S )N   r         ?ocolor   )
zipr   r   cmSet1colorslenplotgetAssertionError)	locationsaxessubplotkwargslocr   r	   r	   r   _plotLocationsDots   s    ,	r(   c                    s   t | }t|d }t|| }d kr:d gt |  t|   fddtt D t| d  }t |dkrt |d |||fdi| n2t |dkrt ||||fdi| nt	dd S )	Ng      ?c                    s   g | ]} j |  qS r	   )ZreverseMappingr
   modelnamesr	   r   r   3   s     z!plotLocations.<locals>.<listcomp>r   r   r+   r   Only 1 or 2 axes are supported)
r   mathceilr   r   sortedkeys_plotLocations2D_plotLocations3D
ValueError)r#   figr+   r&   ncolsrowsr$   r	   r)   r   plotLocations*   s    "r8   c                 K   s   | d}tt| jttjjjt|D ]\}\}	}
}|d k	rJ|	| |
| tdd |	|d}g g  }}t|D ]&}t||i|	}|| || q~|j||fd|
i| t| j|g| q*d S )No         r   r:   g        r   r   )add_subplot	enumerater   supportsr   r   r   r   r   	set_title
set_xlabelxlimr!   r   r   appendr    r(   r#   )r*   axisr4   r6   r7   r+   r&   r%   r   r   r   nameXsXYxyr	   r	   r   r1   >   s     




r1   c                 K   s  |\}}|j ddd}	tt| jttjjjt|D ]^\}
\}}}|d k	rX|		| |	
| |	| tdd tdd ||d}||d}t|D ]h}g g g   }}}|D ]4}t||||i|}|| || || q|	j|||fd|i| qt|D ]l}g g g   }}}|D ]6}t||||i|}|| || || q.|	j|||fd|i| qt| j||g|	 q6d S )Nr9   3dZ
projectionr:   r   r;   r   )r<   r=   r   r>   r   r   r   r   r   r?   r@   Z
set_ylabelrA   Zylimr!   r   r   rB   r    r(   r#   )r*   r$   r4   r7   r6   r+   r&   Zax1Zax2axis3Dr   r   r   rD   rE   ZYsrH   rF   rG   ZrI   zr	   r	   r   r2   S   s<    






r2   c                 K   s<   |    dd | jD }dd | jD }t|||f| d S )Nc                 S   s   g | ]
}|j qS r	   )locationr   sr	   r	   r   r   y   s     z plotDocument.<locals>.<listcomp>c                 S   s   g | ]
}|j qS r	   )rD   rP   r	   r	   r   r   z   s     )	normalizesourcesr8   )docr4   r&   r#   r+   r	   r	   r   plotDocumentw   s    rU   c                    s   t | jdkst| jd  t fdd| jD }t fdd| jD }dd l}||||| d }g }|D ]"}	 |	i}
| |
|}|	| qr|
d}|j||df| d S )	Nr   r   c                 3   s   | ]}|  d V  qdS r   Nr!   r   r'   rC   r	   r   	<genexpr>   s     z*_plotModelFromMasters2D.<locals>.<genexpr>c                 3   s   | ]}|  d V  qdS rV   rW   rX   rY   r	   r   rZ      s     d   r9   -)r   	axisOrderr"   minr#   maxnumpyarangeinterpolateFromMastersrB   r<   r    )r*   masterValuesr4   r&   Zaxis_minZaxis_maxnprF   rG   rH   r'   vr%   r	   rY   r   _plotModelFromMasters2D~   s    

rf   c                    sV  t | jdkst| jd | jd   t fdd| jD }t fdd| jD }tfdd| jD }tfdd| jD }dd l}||||| d	 }	||||| d	 }
||	|
\}	}
g }t	|	|
D ]L\}}g }|
| t	||D ]*\}} ||i}| ||}|
| qq||}|jd
dd}|j|	|
|f| d S )Nr   r   r   c                 3   s   | ]}|  d V  qdS rV   rW   rX   axis1r	   r   rZ      s     z*_plotModelFromMasters3D.<locals>.<genexpr>c                 3   s   | ]}|  d V  qdS rV   rW   rX   rg   r	   r   rZ      s     c                 3   s   | ]}|  d V  qdS rV   rW   rX   axis2r	   r   rZ      s     c                 3   s   | ]}|  d V  qdS rV   rW   rX   ri   r	   r   rZ      s     r[   r9   rJ   rK   )r   r]   r"   r^   r#   r_   r`   ra   Zmeshgridr   rB   rb   arrayr<   Zplot_surface)r*   rc   r4   r&   Z	axis1_minZ	axis1_maxZ	axis2_minZ	axis2_maxrd   rF   rG   rM   Zrow_xZrow_yZz_rowrH   rI   r'   re   rL   r	   )rh   rj   r   _plotModelFromMasters3D   s*    

rl   c                 K   sL   t | jdkr t| ||f| n(t | jdkr@t| ||f| ntddS )zPlot a variation model and set of master values corresponding
    to the locations to the model into a pyplot figure.  Variation
    model must have axisOrder of size 1 or 2.r   r   r,   N)r   r]   rf   rl   r3   )r*   rc   r4   r&   r	   r	   r   plotModelFromMasters   s
    rm   c              
      s  ddl m} | d kr"tjdd  } |  t| dk rxtdtjd td tdtjd td tdtjd td t	 }|
d	 t| dkr| d d
rt }|| d  t|| ndd ttdtdd D  d| d kr fdd| D }t|| nzg }g }| D ]F}|d\}}	|tt dd |dD  |t|	 qt| d t|d  }
t|
|| t  d S )Nr   )configLoggerr   z/usage: fonttools varLib.plot source.designspace)filez  orz4usage: fonttools varLib.plot location1 location2 ...zBusage: fonttools varLib.plot location1=value1 location2=value2 ...Tz.designspacec                 S   s   g | ]}t |qS r	   )chr)r   r   r	   r	   r   r      s     zmain.<locals>.<listcomp>ArM   =c              	      s*   g | ]"}t t d d |dD qS )c                 s   s   | ]}t |V  qd S Nfloatr   re   r	   r	   r   rZ      s     z"main.<locals>.<listcomp>.<genexpr>,)dictr   splitrP   r$   r	   r   r      s     c                 s   s   | ]}t |V  qd S rs   rt   rv   r	   r	   r   rZ      s     zmain.<locals>.<genexpr>rw   )Z	fontToolsrn   sysargvr   printstderrexitr   figureZset_tight_layoutendswithr   readrU   r   ordr8   ry   rB   rx   r   ru   r   rm   show)argsrn   r4   rT   Zlocsr#   rc   argr'   re   r*   r	   rz   r   main   sB    

 $r   __main__)r   )N)N)__doc__ZfontTools.varLib.modelsr   r   ZfontTools.designspaceLibr   Z
matplotlibr   Zmpl_toolkits.mplot3dr   	itertoolsr   r-   loggingr{   	getLogger__name__logr   r(   r8   r1   r2   rU   rf   rl   rm   r   r   r	   r	   r	   r   <module>   s,   



$
/