
    hF                        S r SSKJrJr  SSKJr  SSKJr  SSKJ	r	  SSK
Jr  SSKrSSKrSSKr\R                  " \5      rSS jrS	 rSS
 jrS rS rS rS rS rS rSS jr\S:X  a  SSKr\R8                  " \" 5       5        gg)z;Visualize DesignSpaceDocument and resulting VariationModel.    )VariationModelsupportScalar)DesignSpaceDocument)pyplot)axes3d)cycleNc                     U u  p#n[        U5       Vs/ s H  oRX2-
  U-  U-  -   PM     sn[        U5       Vs/ s H  oSXC-
  U-  U-  -   PM     sn-   U/-   $ s  snf s  snf N)range)supportcountabcis         G/var/www/html/env/lib/python3.13/site-packages/fontTools/varLib/plot.pystopsr      so    GA! +0,7,Qaeq[5 	 ,7,1%L
9Lq{U""L
9	:#	7
9s
   AAc                    [        U [        [        R                  R                  R
                  5      5       H  u  pE[        U5      S:X  a.  UR                  " UR                  US   S5      /S/S4SU0UD6  MB  [        U5      S:X  aC  UR                  " UR                  US   S5      /UR                  US   S5      /S/S4SU0UD6  M  [        [        U5      5      e   g )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
t9>LL#''$q'1-.sR%R6RY!^LLa!$%a!$%	
   !T++ C    c                    [        U 5      n[        R                  " US-  5      n[        R                  " XE-  5      nUc  S /[        U 5      -  n[        U 5      n[	        [        U5      5       Vs/ s H  oUR
                  U      PM     nn[        U S   R                  5       5      n	[        U	5      S:X  a  [        XyS   XU4SU0UD6  g [        U	5      S:X  a  [        XyXU4SU0UD6  g [        S5      es  snf )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99QXD}Y'9%E5:3u:5FG5F5''*+5FEG)A,##%&D
4yA~QDPPP	TacMUMfM9:: Hs   0C7c           	      f   UR                  S5      n[        [        U R                  [	        [
        R                  R                  R                  5      [	        U5      5      5       H  u  nu  pnUb  UR                  U5        UR                  U5        [
        R                  " SS5        U	R                  US5      n/ / p[        U5       H2  n[        X0U	5      nUR                  U5        UR                  U5        M4     UR                   " X4SU
0UD6  [#        U R$                  U/U5        M     g )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&!!GD d#4 D$[[0121rAti1AHHQKHHQK  	Q11&15??TFG<!&r(   c           	         Uu  pxUR                  SSS9n	[        [        U R                  [	        [
        R                  R                  R                  5      [	        U5      5      5       GH  u  n
u  pnUb  U	R                  U5        U	R                  U5        U	R                  U5        [
        R                  " SS5        [
        R                  " SS5        UR                  US5      nUR                  US5      n[        U5       Hl  n/ / / nnnU HF  n[!        UUUU0U5      nUR#                  U5        UR#                  U5        UR#                  U5        MH     U	R$                  " UUU4SU0UD6  Mn     [        U5       Hl  n/ / / nnnU HF  n[!        UUUU0U5      nUR#                  U5        UR#                  U5        UR#                  U5        MH     U	R$                  " UUU4SU0UD6  Mn     ['        U R(                  Xx/U	5        GM     g )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&!!GD T"##D$D$[[/0[[/0rA"b!qA!33"2G<	 
 KK1a7u77  rA"b!qA!33"2G<	 
 KK1a7u77  	5??SJ?;&r(   c                     U R                  5         U R                   Vs/ s H  o3R                  PM     nnU R                   Vs/ s H  o3R                  PM     nn[	        XAU40 UD6  g s  snf s  snf r
   )	normalizesourceslocationrF   r9   )docr4   r%   sr"   r*   s         r   plotDocumentr^   w   sV    MMO%([[1[[I1 [[)[VV[E))%262 2)s   A)A.c                   ^ [        U R                  5      S:X  d   eU R                  S   m[        U4S jU R                   5       5      n[	        U4S jU R                   5       5      nSS KnUR                  XEXT-
  S-  5      n/ nU H)  n	TU	0n
U R                  X5      nUR                  U5        M+     UR                  S5      nUR                  " XxS40 UD6  g )Nr   r   c              3   F   >#    U  H  oR                  TS 5      v   M     g7fr   Nr    .0r&   rE   s     r   	<genexpr>*_plotModelFromMasters2D.<locals>.<genexpr>        ?774##   !c              3   F   >#    U  H  oR                  TS 5      v   M     g7fra   rb   rc   s     r   re   rf      rg   rh   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   _plotModelFromMasters2Drw   ~   s    u1$$$??1D?u??H?u??H
		(x':c&ABA
AQi((;	 
 ooc"GLLs%f%r(   c                 6  ^^ [        U R                  5      S:X  d   eU R                  S   U R                  S   smm[        U4S jU R                   5       5      n[	        U4S jU R                   5       5      n[        U4S jU R                   5       5      n[	        U4S jU R                   5       5      nSS KnUR                  XEXT-
  S-  5      n	UR                  XgXv-
  S-  5      n
UR                  X5      u  p/ n[        X5       HV  u  p/ nUR                  U5        [        X5       H/  u  nnTUTU0nU R                  UU5      nUR                  U5        M1     MX     UR                  U5      nUR                  S	S
S9nUR                  " XU40 UD6  g )Nr   r   r   c              3   F   >#    U  H  oR                  TS 5      v   M     g7fra   rb   rd   r&   axis1s     r   re   *_plotModelFromMasters3D.<locals>.<genexpr>        A#GGE1%%rh   c              3   F   >#    U  H  oR                  TS 5      v   M     g7fra   rb   rz   s     r   re   r|      r}   rh   c              3   F   >#    U  H  oR                  TS 5      v   M     g7fra   rb   rd   r&   axis2s     r   re   r|      r}   rh   c              3   F   >#    U  H  oR                  TS 5      v   M     g7fra   rb   r   s     r   re   r|      r}   rh   rj   r;   rM   rN   )r   rl   rm   r"   rn   ro   rp   meshgridr   rD   rq   arrayr>   plot_surface)r8   rr   r4   r%   	axis1_min	axis1_max	axis2_min	axis2_maxru   rH   rI   rV   row_xrow_yz_rowrJ   rK   r&   rv   rT   r{   r   s                       @@r   _plotModelFromMasters3Dr      sc   u1$$$??1%uq'9LE5AAAIAAAIAAAIAAAI
		))>#(EFA
		))>#(EFA;;qDA
AA		%DAq!UA&C,,S,?ALLO & " 	A__ST_2F
a*6*r(   c                     [        U R                  5      S:X  a  [        XU40 UD6  g[        U R                  5      S:X  a  [        XU40 UD6  g[	        S5      e)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   rl   rw   r   r3   )r8   rr   r4   r%   s       r   plotModelFromMastersr      sP     5??q SCFC	U__		"SCFC9::r(   c                    SSK Jn  U c  [        R                  SS  n U" 5         [	        U 5      S:  at  [        S[        R                  S9  [        S5        [        S[        R                  S9  [        S5        [        S[        R                  S9  [        R                  " S5        [        R                  " 5       nUR                  S	5        [	        U 5      S:X  aD  U S   R                  S
5      (       a+  [        5       nUR                  U S   5        [        X25        GO$[        [!        S5      [!        S5      S-   5       Vs/ s H  n[#        U5      PM     nnSU S   ;  aG  U  Vs/ s H.  n[%        ['        US UR)                  S5       5       5      5      PM0     nn[+        Xr5        O/ n/ n	U  Hj  n
U
R)                  S5      u  pUR-                  [%        ['        US UR)                  S5       5       5      5      5        U	R-                  [/        U5      5        Ml     [1        XS [	        US   5       5      n[3        XU5        [        R4                  " 5         g s  snf s  snf )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   8   #    U  H  n[        U5      v   M     g 7fr
   floatrd   rv   s     r   re   main.<locals>.<genexpr>   s     #ClE!HHl   ,c              3   8   #    U  H  n[        U5      v   M     g 7fr
   r   r   s     r   re   r      s     0R>aq>r   )	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"   rr   argr&   rv   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Tt!DT#Caggcl#CDEtDT$$IL3  c$0R399S>0R&S!TU##E!H-  #93FS15F.GHE c:
KKM ?Ts   I'5I__main__)
   r
   )__doc__fontTools.varLib.modelsr   r   fontTools.designspaceLibr   
matplotlibr   mpl_toolkits.mplot3dr   	itertoolsr   r,   loggingr   	getLogger__name__logr   r'   r9   r1   r2   r^   rw   r   r   r   r    r(   r   <module>r      s    A A 8  '    
!,";(=*!@H3&*+:	;,^ zHHTV r(   