o
    a9                     @   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dZedkrbddlZee  dS 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                        g | ]}   |   qS  r
   .0i)abcountr
   7/usr/lib/python3/dist-packages/fontTools/varLib/plot.py
<listcomp>        zstops.<locals>.<listcomp>c                    r	   r
   r
   r   )r   cr   r
   r   r      r   )range)supportr   r
   )r   r   r   r   r   stops   s   
r   c                 K   s   t | ttjjjD ]I\}}t|dkr*|j||d dgdgdfd|i| q
t|dkrN|j||d dg||d dgdgdfd|i| q
t	t|d S )N   r         ?ocolor   )
zipr   r   cmSet1colorslenplotgetAssertionError)	locationsaxessubplotkwargslocr   r
   r
   r   _plotLocationsDots   s0   	r*   c                    s   t | }t|d }t|| }d u rd gt |  t|   fddtt D t| d  }t |dkrOt |d |||fdi| d S t |dkret ||||fdi| d S t	d)	Ng      ?c                    s   g | ]	} j |  qS r
   )ZreverseMappingr   modelnamesr
   r   r   7   s    z!plotLocations.<locals>.<listcomp>r   r   r-   r   zOnly 1 or 2 axes are supported)
r!   mathZceilr   r   sortedkeys_plotLocations2D_plotLocations3D
ValueError)r%   figr-   r(   ncolsrowsr&   r
   r+   r   plotLocations.   s2   


r8   c                 K   s   | d}tt| jttjjjt|D ]R\}\}	}
}|d ur%|	| |
| 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,   Zaxisr4   r6   r7   r-   r(   r'   r   r   r   nameXsXYxyr
   r
   r   r1   F   s"   




r1   c                 K   s  |\}}|j ddd}	tt| jttjjjt|D ]\}
\}}}|d ur+|		| |	
| |	| tdd tdd ||d}||d}t|D ]4}g g g }}}|D ]}t||||i|}|| || || q]|	j|||fd|i| qQt|D ]4}g g g }}}|D ]}t||||i|}|| || || q|	j|||fd|i| qt| j||g|	 qd S )Nr9   Z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ax2Zaxis3Dr   r   r   rC   rD   ZYsrG   rE   rF   ZrH   zr
   r
   r   r2   [   s>   






r2   c                 K   s@   |    dd | jD }dd | jD }t|||fi | d S )Nc                 S      g | ]}|j qS r
   )locationr   sr
   r
   r   r          z plotDocument.<locals>.<listcomp>c                 S   rK   r
   )rC   rM   r
   r
   r   r      rO   )	normalizeZsourcesr8   )docr4   r(   r%   r-   r
   r
   r   plotDocument   s   rR   c                    s   ddl m} | d u rtjdd  } |  t| dk r1tdtjd td tdtjd td t	 }|
d t| dkrW| d d	rWt }|| d  t|| nd
d ttdtdd D   fdd| D }t|| t  d S )Nr   )configLoggerr   z/usage: fonttools varLib.plot source.designspace)filez  orz4usage: fonttools varLib.plot location1 location2 ...Tz.designspacec                 S   s   g | ]}t |qS r
   )chr)r   r   r
   r
   r   r      s    zmain.<locals>.<listcomp>ArI   c              	      s*   g | ]}t t d d |dD qS )c                 s   s    | ]}t |V  qd S N)float)r   vr
   r
   r   	<genexpr>   s    z"main.<locals>.<listcomp>.<genexpr>,)dictr   splitrM   r&   r
   r   r      s   * )Z	fontToolsrS   sysargvr!   printstderrexitr   ZfigureZset_tight_layoutendswithr   readrR   r   ordr8   Zshow)argsrS   r4   rQ   Zlocsr
   r^   r   main   s&   

 
rh   __main__)r   rW   )__doc__ZfontTools.varLib.modelsr   r   ZfontTools.designspaceLibr   Z
matplotlibr   Zmpl_toolkits.mplot3dr   	itertoolsr   r.   Zloggingr_   Z	getLogger__name__logr   r*   r8   r1   r2   rR   rh   rc   r
   r
   r
   r   <module>   s*    


$
