
    jkeF                        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j                  e      ZddZd	 Zdd
Zd Zd Zd Zd Zd Zd ZddZedk(  rddlZ ej8                   e              yy)z;Visualize DesignSpaceDocument and resulting VariationModel.    )VariationModelsupportScalar)DesignSpaceDocument)pyplot)axes3d)cycleNc                     | \  }}}t        |      D cg c]  }|||z
  |z  |z  z    c}t        |      D cg c]  }|||z
  |z  |z  z    c}z   |gz   S c c}w c c}w N)range)supportcountabcis         7/usr/lib/python3/dist-packages/fontTools/varLib/plot.pystopsr      sq    GAq! +0,7Qa!eq[5 	 7,1%L
9q1A{U""
9	:#	7
9s
   AAc                    t        | t        t        j                  j                  j
                              D ]  \  }}t        |      dk(  r- |j                  |j                  |d   d      gdgdfd|i| At        |      dk(  rB |j                  |j                  |d   d      g|j                  |d   d      gdgdfd|i| t        t        |             y )N   r         ?ocolor   )
zipr   r   cmSet1colorslenplotgetAssertionError)	locationsaxessubplotkwargslocr   s         r   _plotLocationsDotsr'      s    )U699>>+@+@%AB ,
Ut9>GLL#''$q'1-.sR%R6RY!^GLLa!$%a!$%	
   !T++,    c                    t        |       }t        j                  |dz        }t        j                  ||z        }|d gt        |       z  }t        |       }t	        t        |            D cg c]  }||j
                  |       }}t        | d   j                               }	t        |	      dk(  rt        ||	d   |||fd|i| y t        |	      dk(  rt        ||	|||fd|i| y t        d      c c}w )Ng      ?r   r   namesr   Only 1 or 2 axes are supported)r   mathceilr   r   reverseMappingsortedkeys_plotLocations2D_plotLocations3D
ValueError)
r"   figr*   r%   ncolsrowsmodelr   r#   s
             r   plotLocationsr9   *   s    IA99QVD99QXD}Y'9%E5:3u:5FGU5''*+GEG)A,##%&D
4yA~QdDPPP	Tac4MUMfM9:: Hs   .C5c           	      b   |j                  d      }t        t        | j                  t	        t
        j                  j                  j                        t	        |                  D ]  \  }\  }	}
}||j                  |       |j                  |       t        j                  dd       |	j                  |d      }g g }}t        |      D ]2  }t        ||i|	      }|j                  |       |j                  |       4  |j                   ||fd|
i| t#        | j$                  |g|        y )No         r   r<   g        r   r   )add_subplot	enumerater   supportsr   r   r   r   r   	set_title
set_xlabelxlimr    r   r   appendr   r'   r"   )r8   axisr4   r6   r7   r*   r%   r$   r   r   r   nameXsXYxys                    r   r1   r1   >   s
   ooc"G%.ENNE&)).."7"78%,G& =!!GUD d#4 D$[[0121r 	AtQi1AHHQKHHQK	 	Q11&15??TFG<!=r(   c           	         |\  }}|j                  dd      }	t        t        | j                  t	        t
        j                  j                  j                        t	        |                  D ]  \  }
\  }}}||	j                  |       |	j                  |       |	j                  |       t        j                  dd       t        j                  dd       |j                  |d      }|j                  |d      }t        |      D ]i  }g g g }}}|D ]E  }t!        ||||i|      }|j#                  |       |j#                  |       |j#                  |       G  |	j$                  |||fd|i| k t        |      D ]i  }g g g }}}|D ]E  }t!        ||||i|      }|j#                  |       |j#                  |       |j#                  |       G  |	j$                  |||fd|i| k t'        | j(                  ||g|	        y )Nr;   3d
projectionr<   r   r=   r   )r>   r?   r   r@   r   r   r   r   r   rA   rB   
set_ylabelrC   ylimr    r   r   rD   r   r'   r"   )r8   r#   r4   r7   r6   r*   r%   ax1ax2axis3Dr   r   r   rF   rG   YsrJ   rH   rI   ZrK   zs                         r   r2   r2   S   s   HC__ST_2F%.ENNE&)).."7"78%,G& @!!GUD T"##D$D$[[/0[[/0r 	8A"b!qA !33"2G<	
 FKK1a7u77	8 r 	8A"b!qA !33"2G<	
 FKK1a7u77	8 	5??S#J?;@r(   c                     | j                          | j                  D cg c]  }|j                   }}| j                  D cg c]  }|j                   }}t	        |||fi | y c c}w c c}w r
   )	normalizesourceslocationrF   r9   )docr4   r%   sr"   r*   s         r   plotDocumentr^   w   sZ    MMO%([[11I1 [[)QVV)E))S%262 2)s   A&A+c                    t        | j                        dk(  sJ | j                  d   t        fd| j                  D              }t	        fd| j                  D              }dd l}|j                  ||||z
  dz        }g }|D ])  }	|	i}
| j                  |
|      }|j                  |       + |j                  d      } |j                  ||dfi | y )Nr   r   c              3   B   K   | ]  }|j                  d         ywr   Nr    .0r&   rE   s     r   	<genexpr>z*_plotModelFromMasters2D.<locals>.<genexpr>        ?3774#?   c              3   B   K   | ]  }|j                  d         ywra   rb   rc   s     r   re   z*_plotModelFromMasters2D.<locals>.<genexpr>   rf   rg   d   r;   -)r   	axisOrderminr"   maxnumpyarangeinterpolateFromMastersrD   r>   r   )r8   masterValuesr4   r%   axis_minaxis_maxnprH   rI   rJ   r&   vr$   rE   s                @r   _plotModelFromMasters2Drv   ~   s    u1$$$??1D?u??H?u??H
		(Hx(':c&ABA
A Qi((l;	
 ooc"GGLLAs%f%r(   c                 >   t        | j                        dk(  sJ | j                  d   | j                  d   ct        fd| j                  D              }t	        fd| j                  D              }t        fd| j                  D              }t	        fd| j                  D              }dd l}|j                  ||||z
  dz        }	|j                  ||||z
  dz        }
|j                  |	|
      \  }	}
g }t        |	|
      D ]U  \  }}g }|j                  |       t        ||      D ].  \  }}||i}| j                  ||      }|j                  |       0 W |j                  |      }|j                  d	d
      } |j                  |	|
|fi | y )Nr   r   r   c              3   B   K   | ]  }|j                  d         ywra   rb   rd   r&   axis1s     r   re   z*_plotModelFromMasters3D.<locals>.<genexpr>        A#CGGE1%Arg   c              3   B   K   | ]  }|j                  d         ywra   rb   ry   s     r   re   z*_plotModelFromMasters3D.<locals>.<genexpr>   r{   rg   c              3   B   K   | ]  }|j                  d         ywra   rb   rd   r&   axis2s     r   re   z*_plotModelFromMasters3D.<locals>.<genexpr>   r{   rg   c              3   B   K   | ]  }|j                  d         ywra   rb   r~   s     r   re   z*_plotModelFromMasters3D.<locals>.<genexpr>   r{   rg   ri   r;   rM   rN   )r   rk   rl   r"   rm   rn   ro   meshgridr   rD   rp   arrayr>   plot_surface)r8   rq   r4   r%   	axis1_min	axis1_max	axis2_min	axis2_maxrt   rH   rI   rV   row_xrow_yz_rowrJ   rK   r&   ru   rT   rz   r   s                       @@r   _plotModelFromMasters3Dr      s   u1$$$??1%uq'9LE5AAAIAAAIAAAIAAAI
		)YY)>#(EFA
		)YY)>#(EFA;;q!DAq
AAq	 u	u% 	DAq!UA&C,,S,?ALLO	 	A__ST_2FF1a*6*r(   c                     t        | j                        dk(  rt        | ||fi | yt        | j                        dk(  rt        | ||fi | yt	        d      )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   rk   rv   r   r3   )r8   rq   r4   r%   s       r   plotModelFromMastersr      sT     5??q |SCFC	U__		"|SCFC9::r(   c                    ddl m} | t        j                  dd  }  |        t	        |       dk  r|t        dt        j                         t        d       t        dt        j                         t        d       t        dt        j                         t        j                  d       t        j                         }|j                  d	       t	        |       dk(  r@| d   j                  d
      r,t               }|j                  | d          t        ||       nt        t!        d      t!        d      dz         D cg c]  }t#        |       }}d| d   vrE| D cg c]-  }t%        t'        |d |j)                  d      D                    / }}t+        ||       ng }g }	| D ]j  }
|
j)                  d      \  }}|j-                  t%        t'        |d |j)                  d      D                           |	j-                  t/        |             l t1        ||d t	        |d                }t3        ||	|       t        j4                          y c c}w c c}w )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.designspaceArV   =c              3   2   K   | ]  }t        |        y wr
   floatrd   ru   s     r   re   zmain.<locals>.<genexpr>   s     #CE!H#C   ,c              3   2   K   | ]  }t        |        y wr
   r   r   s     r   re   zmain.<locals>.<genexpr>   s     0Raq0Rr   )	fontToolsr   sysargvr   printstderrexitr   figureset_tight_layoutendswithr   readr^   r   ordchrdictr   splitr9   rD   r   r   r   show)argsr   r4   r\   r   r#   r]   locsr"   rq   argr&   ru   r8   s                 r   mainr      s   &|xx| N 4y1}?cjjQfD3::VfP	
 	
--/C
4yA~$q'**>:!#aS# %c#hC1 =>1A>>d1gOST!DT#Caggcl#CDETDT$$IL .3Q  c$0R399S>0R&S!TU##E!H-. #9d3FS15F.GHE c:
KKM ?Ts   I"2I__main__)
   r
   )__doc__fontTools.varLib.modelsr   r   fontTools.designspaceLibr   
matplotlibr   mpl_toolkits.mplot3dr   	itertoolsr   r,   loggingr   	getLogger__name__logr   r'   r9   r1   r2   r^   rv   r   r   r   r    r(   r   <module>r      s    A A 8  '    
g!,";(=*!@H3&*+:	;,^ zCHHTV r(   