
    ]zi/F                        S SK r S SKrS SKrS SKrS SK7  S SK7  S SK7  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\R0                  " S5        S SKrS SKJrJrJr  S S	KJr  \R@                  RC                  S
S
SSSS.5         " S S\"5      r#\$S:X  aa  \" SSS9r%\%RM                  5       r'\(" \RR                  5      r*\#" 5       r+\+RY                  5         \RZ                  " \*R]                  5       5        gg)    N)*)FigureCanvasQTAggNavigationToolbar2QT)Figure)ArgumentParser)dateignore)PALETTES	SEQUENCEScolor_palette)set_palettez#434343white)zfigure.facecolorzaxes.facecolorzaxes.labelcolorzxtick.colorzytick.colorc                       \ rS rSrSS jrS rS rS rS rS r	S	 r
S
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)MainGUI   Nc                     [         R                  X5        [        R                  " 5       S:  a  [        S5        [        eU R                  5         U R                  5         g )Ni `kzKPlease download a new version from https://streubel.unl.edu/STARTSMART.html)QMainWindow__init__timeprint
SystemExitinitUIUpdateDataVisualization)selfparents     Spirograph.pyr   MainGUI.__init__   sB    T*99;#_`$$&    c                 @   [        5       U l        U R                  [        S5      5        U R	                  S5        U R                  5         U R                  5         U R                  5         U R                  R                  S5        [        5       nUR                  U R                  5        UR                  U R                  5        U R                  R                  U5        U R                  S5        U R                  U R                  5        U R!                  SS5        g )Nzicon.pngzQTextEdit, QLineEdit {background: '#707070'; color: white;} QGroupBox {border: 1px solid gray; border-radius: 5px; margin-top: 8px;} QGroupBox:title { subcontrol-origin: margin; subcontrol-position: top center; padding: 0 3px 0 3px; }i,  u   ⌘ Streubel Lab Spirograph ⌘  i   )QWidgetMainsetWindowIconQIconsetStyleSheetinitParametersCreateParameterTabCreateDataVisualizationParameterTabsetFixedWidthQHBoxLayout	addWidgetDataVisualization	setLayoutsetWindowTitlesetCentralWidgetsetMinimumSize)r   hboxs     r   r   MainGUI.initUI   s    I	5,-  H  	I!$$&'',}t(()t--.		D!=>dii(D%r   c                 b   SS/U l         SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l	        SU l
        SU l        SU l        / SQU l        / SQU l        / SQU l        [         S	   S
   [#        [$        R&                  R)                  S5      S
-  5         U l        [         S	   S
   [#        [$        R&                  R)                  S5      S
-  5         U l        [         S	   S
   [#        [$        R&                  R)                  S5      S
-  5         U l        g )Nr   r    x   N   UUUUUU?g      ?)SelectHypotrochoidEpitrochoidElliptical Hypotrochoid)Noner9   r:   r;   Spectral      )XR1r1d1e1R2r2d2e2R3r3d3e3ComboSpirographListComboSpirographList2ComboSpirographList3r   intnprandomrandcolorcolor2color3)r   s    r   r&   MainGUI.initParameters1   s    D#d $c!$c!z*2.s299>>!3DR3G/HI

+B/BIINN14Eb4H0IJ
+B/BIINN14Eb4H0IJr   c                    [        5       U l        [        5       n[        S5      n[	        [        U R                  S   5      5      U l        U R                  R                  [        SS5      5        U R                  R                  S5        [        S5      n[	        [        U R                  S   5      5      U l        U R                  R                  [        SS5      5        U R                  R                  S5        UR                  U5        UR                  U R                  5        UR                  U5        UR                  U R                  5        [        5       U l        U R                  R                  U R                   5        U R                  R#                  S	5        U R                  R%                  S5        [        5       n[        S
5      n[	        [        U R&                  5      5      U l        U R(                  R                  [+        SSS5      5        U R(                  R                  S5        UR                  U5        UR                  U R(                  5        [        5       n[        S5      n[	        [        U R,                  5      5      U l        U R.                  R                  [+        SSS5      5        U R.                  R                  S5        UR                  U5        UR                  U R.                  5        [        5       n[        S5      n	[	        [        U R0                  5      5      U l        U R2                  R                  [+        SSS5      5        U R2                  R                  S5        UR                  U	5        UR                  U R2                  5        [        5       n
[        S5      n[	        [        [5        U R6                  S5      5      5      U l        U R8                  R                  [+        SSS5      5        U R8                  R                  S5        U
R                  U5        U
R                  U R8                  5        [        5       U l        U R:                  R                  U R<                  5        U R:                  R#                  S	5        U R:                  R%                  S5        [        5       n[        S
5      n[	        [        U R>                  5      5      U l         U R@                  R                  [+        SSS5      5        U R@                  R                  S5        UR                  U5        UR                  U R@                  5        [        5       n[        S5      n[	        [        U RB                  5      5      U l"        U RD                  R                  [+        SSS5      5        U RD                  R                  S5        UR                  U5        UR                  U RD                  5        [        5       n[        S5      n[	        [        U RF                  5      5      U l$        U RH                  R                  [+        SSS5      5        U RH                  R                  S5        UR                  U5        UR                  U RH                  5        [        5       n[        S5      n[	        [        [5        U RJ                  S5      5      5      U l&        U RL                  R                  [+        SSS5      5        U RL                  R                  S5        UR                  U5        UR                  U RL                  5        [        5       U l'        U RN                  R                  U RP                  5        U RN                  R#                  S	5        U RN                  R%                  S5        [        5       n[        S
5      n[	        [        U RR                  5      5      U l*        U RT                  R                  [+        SSS5      5        U RT                  R                  S5        UR                  U5        UR                  U RT                  5        [        5       n[        S5      n[	        [        U RV                  5      5      U l,        U RX                  R                  [+        SSS5      5        U RX                  R                  S5        UR                  U5        UR                  U RX                  5        [        5       n[        S5      n[	        [        U RZ                  5      5      U l.        U R\                  R                  [+        SSS5      5        U R\                  R                  S5        UR                  U5        UR                  U R\                  5        [        5       n[        S5      n[	        [        [5        U R^                  S5      5      5      U l0        U R`                  R                  [+        SSS5      5        U R`                  R                  S5        UR                  U5        UR                  U R`                  5        [c        U R                  5      nURe                  U5        [        S5      n[c        5       nUR                  U R                  5        URe                  U5        URe                  U5        URe                  U5        URe                  U
5        URg                  U5        UR                  U5        [        S5      n[c        5       n U R                  U R:                  5        U Re                  U5        U Re                  U5        U Re                  U5        U Re                  U5        URg                  U 5        UR                  U5        [        S5      n![c        5       n"U"R                  U RN                  5        U"Re                  U5        U"Re                  U5        U"Re                  U5        U"Re                  U5        U!Rg                  U"5        UR                  U!5        URi                  [k        SS[l        Rn                  Rp                  [l        Rn                  Rr                  5      5        U R                  Rt                  Rw                  U Rx                  5        U R                  Rt                  Rw                  U Rz                  5        U R                  R|                  Rw                  U R~                  5        U R(                  Rt                  Rw                  U R                  5        U R.                  Rt                  Rw                  U R                  5        U R8                  Rt                  Rw                  U R                  5        U R2                  Rt                  Rw                  U R                  5        U R:                  R|                  Rw                  U R                  5        U R@                  Rt                  Rw                  U R                  5        U RD                  Rt                  Rw                  U R                  5        U RL                  Rt                  Rw                  U R                  5        U RH                  Rt                  Rw                  U R                  5        U RN                  R|                  Rw                  U R                  5        U RT                  Rt                  Rw                  U R                  5        U RX                  Rt                  Rw                  U R                  5        U R`                  Rt                  Rw                  U R                  5        U R\                  Rt                  Rw                  U R                  5        g )NzFrom:r   ii  2   zTo:r?   i    zRadius of stationary ring:r       <   zRadius of moving ring:zEccentricity of moving ring:+?   zDistance of pen from center:   
   zSpirograph 1zSpirograph 2zSpirograph 3   d   )N	QGroupBoxr)   r+   QLabel	QLineEditstrr@   X0EditsetValidatorQIntValidatorr*   X1Editr,   	QComboBoxComboSpirographaddItemsrM   setMaximumWidthsetCurrentIndexrA   R1EditQDoubleValidatorrB   r1EditrD   e1EditroundrC   d1EditComboSpirograph2rN   rE   R2EditrF   r2EditrH   e2EditrG   d2EditComboSpirograph3rO   rI   R3EditrJ   r3EditrL   e3EditrK   d3EditQVBoxLayout	addLayoutr.   addSpacerItemQSpacerItemQSizePolicyPolicyMinimum	ExpandingtextChangedconnect
X0_changed
X1_changedcurrentIndexChangedComboSpirograph_changed
R1_changed
r1_changed
d1_changed
e1_changedComboSpirograph2_changed
R2_changed
r2_changed
d2_changed
e2_changedComboSpirograph3_changed
R3_changed
r3_changed
d3_changed
e3_changed)#r   hbox0X0LabelX1Labelhbox00R1Labelhbox01r1Labelhbox02e1Labelhbox03d1Labelhbox10R2Labelhbox11r2Labelhbox12e2Labelhbox13d2Labelhbox20R3Labelhbox21r3Labelhbox22e3Labelhbox23d3LabelvboxG1ghbox1G2ghbox2G3ghbox3s#                                      r   r'   MainGUI.CreateParameterTabF   s
   %K/DFF1I/  tC!89!!"%-DFF1I/  q!89!!"% $ $({%%d&>&>?,,S1,,Q/56DGG-  !1!D!;<!!"%!%12DGG-  !1!D!;<!!"%!%78DGG-  !1!D!;<!!"%!%78E$''!$4 56  !1!Bq!9:!!"%!% )&&t'@'@A--c2--a056DGG-  !1!D!;<!!"%!%12DGG-  !1!D!;<!!"%!%78DGG-  !1!D!;<!!"%!%78E$''!$4 56  !1!Bq!9:!!"%!% )&&t'@'@A--c2--a056DGG-  !1!D!;<!!"%!%12DGG-  !1!D!;<!!"%!%78DGG-  !1!D!;<!!"%!%78E$''!$4 56  !1!Bq!9:!!"%!%4,,-u~&--.    
Vr~&../    
Vr~&../    
Vr;r#{/A/A/I/I;K]K]KgKghi''8''800889U9UV''8''8''8''81199$:W:WX''8''8''8''81199$:W:WX''8''8''8''8r   c           
         [        5       U l        [        5       n[        5       U l        U R                  R                  SSSSSSS9  U R                  R                  R                  S5        [        U R                  5      U l	        U R                  R                  U5        U R                  R                  / SQ5      U l        U R                  R                  / / [        S   S   [        [         R"                  R%                  S5      S-  5         S9u  U l        U R                  R                  / / [        S   S   [        [         R"                  R%                  S5      S-  5         S9u  U l        U R                  R                  / / [        S   S   [        [         R"                  R%                  S5      S-  5         S9u  U l        U R                  R-                  S	5        U R                  R/                  S
5        U R                  R1                  5         U R                  R3                  5         [5        U R                  5      nUR7                  U R                  5        g )Nr   r?   )leftbottomrighttopwspacehspacez#000)r   r   r?   r?   r=   r>   )coffequal)rc   r-   r!   r   figsubplots_adjustpatchset_facecolorFigureCanvascanvas	setParentadd_axesaxplotr   rP   rQ   rR   rS   ax_dataax_data2ax_data3axis
set_aspecttight_layoutdrawr   r,   )r   dVr   s      r   r(   MainGUI.CreateDataVisualization   s   !*Y8  a!TU V$$V,"488,b!((##I.RYz-B2-Fs299>>Z[K\]_K_G`-abbi
.CB.GBIINN[\L]^`L`Ha.bcbi
.CB.GBIINN[\L]^`L`Ha.bcU7#4112t{{#r   c           	      	   U R                   R                  5       S:  Ga	  U R                  U R                   R                  5       U R                  U R                  U R
                  U R                  5      u  pU R                  R                  U5        U R                  R                  U5        U R                  R                  U R                  5        [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      /nO:U R                  R                  / 5        U R                  R                  / 5        / SQnU R                  R                  5       S:  Ga	  U R                  U R                  R                  5       U R                   U R"                  U R$                  U R&                  5      u  pEU R(                  R                  U5        U R(                  R                  U5        U R(                  R                  U R*                  5        [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      /nO:U R(                  R                  / 5        U R(                  R                  / 5        / SQnU R,                  R                  5       S:  Ga	  U R                  U R,                  R                  5       U R.                  U R0                  U R2                  U R4                  5      u  pxU R6                  R                  U5        U R6                  R                  U5        U R6                  R                  U R8                  5        [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      /n	O:U R6                  R                  / 5        U R6                  R                  / 5        / SQn	U R:                  R=                  [        US   US   U	S   5      S-  [        US   US   U	S   5      S-  /5        U R:                  R?                  [        US   US   U	S   5      S-  [        US   US   U	S   5      S-  /5        U R@                  RC                  5         g )Nr   )r   r   r   r   g?r?   r[   r^   )"rl   currentIndex
SpirographrA   rB   rD   rC   r   	set_xdata	set_ydata	set_colorrT   rQ   minmaxrv   rE   rF   rH   rG   r   rU   r{   rI   rJ   rL   rK   r   rV   r   set_xlimset_ylimr   r   )
r   xylimx2y2lim2x3y3lim3s
             r   r   MainGUI.UpdateDataVisualization  sa   ,,.2//$"6"6"C"C"EdggdggVZV]V]^b^e^efCALL""1%LL""1%LL""4::.66!9RVVAYrvvay;CLL""2&LL""2&C  --/!3OOD$9$9$F$F$HQUQXQXY]Y`Y`aeahahiEBMM##B'MM##B'MM##DKK0FF2Jrvvbz"&&*RVVBZ@DMM##B'MM##B'D  --/!3OOD$9$9$F$F$HQUQXQXY]Y`Y`aeahahiEBMM##B'MM##B'MM##DKK0FF2Jrvvbz"&&*RVVBZ@DMM##B'MM##B'D#c!fT!WT!W5c9#c!fT!WTRSW:UVY:YZ[#c!fT!WT!W5c9#c!fT!WTRSW:UVY:YZ[r   c                    S nS nS n[         R                  " U R                  S   U R                  S   U R                  S   S-  5      n	US:X  a  U" XX55      u  pX4$ US:X  a  U" XX55      u  pX4$ US:X  a  U" XX4U5      u  pW
W4$ )	Nc                     X-   [         R                  " U 5      -  X#-  [         R                  " X-   U-  U -  5      -  -
  X-   [         R                  " U 5      -  X#-  [         R                  " X-   U-  U -  5      -  -
  4$ NrQ   cossintRrds       r   r:   'MainGUI.Spirograph.<locals>.Epitrochoid4  m    C?13rvvqsAgai'8#8813q	/!#bffVWVY[\U\]^U^N_J_:___r   c                     X-
  [         R                  " U 5      -  X#-  [         R                  " X-
  U-  U -  5      -  -   X-
  [         R                  " U 5      -  X#-  [         R                  " X-
  U-  U -  5      -  -
  4$ r   r   r   s       r   r9   (MainGUI.Spirograph.<locals>.Hypotrochoid7  r   r   c           	      t   USU[         R                  " U 5      -  -   -  nU[        SUS-  -
  5      -  nU[         R                  " [        SUS-  -
  5      5      -  n[         R                  " U* U-  [        SUS-  -
  5      -  XF-  -   U[         R                  " U 5      -  -
  S-  U[         R                  " U 5      -  S-  -   5      nXg-
  S-  Xg-   S-  -  n	[         R
                  Xg-   -  SSU	-  S[         R                  " SSU	-  -
  5      -   -  -   -  n
SU[         R                  " U 5      -  U[         R                  " U
S[         R
                  -  U-  -
  U
-  U -  5      -  -
  -  SU[         R                  " U 5      -  U[         R                  " U
S[         R
                  -  U-  -
  U
-  U -  5      -  -
  -  4$ )Nr?   r[   r^   r`      r7   )rQ   r   abssqrtr   pi)r   r   r   er   rrabdisthCs              r   EllipticalHypotrochoid2MainGUI.Spirograph.<locals>.EllipticalHypotrochoid:  s   Aaq	kM"B#a1f+A"''#a1f+&&A77QBqDQq!tV,QS0BFF1I=A2bffQi<RSBSSTDq!#!AqsQqsBrwwq1u~$5667A"&&)D1RUU719a0A)B$BBCS!BFFSTI+VZ[][a[acdefgiglglelmnencnpqbqrsbs[tVtJtEuuur   r   r?   r`   r[   r^   )rQ   linspacer@   )r   mr   r   r  r   r:   r9   r  r   r   r   s               r   r   MainGUI.Spirograph3  s    	`	`	v KKq	$&&)DFF1IbL96q1'CA
 s
	 !Va!&CA s
 !V(Q3CAs
r   c                 b    US;  a)  [        U5      U R                  S'   U R                  5         g g )N -.z-.r   rP   r@   r   r   r   s     r   r   MainGUI.X0_changedL  s-    %%ADFF1I((* &r   c                     US;  aF  [        U5      U R                  S   :  a)  [        U5      U R                  S'   U R                  5         g g g )Nr  r   r?   r  r  s     r   r   MainGUI.X1_changedQ  sC    %%#a&466!9*<ADFF1I((* +=%r   c                     US;  aV  [        U5      S:  a&  SnU R                  R                  [        S5      5        [        U5      U l        U R                  5         g g Nr  r    )floatrp   setTextrf   rA   r   r  s     r   r   MainGUI.R1_changedV  M    %%Qx$##CI.AhDG((* &r   c                     US;  aV  [        U5      S:  a&  SnU R                  R                  [        S5      5        [        U5      U l        U R                  5         g g r  )r  rr   r  rf   rB   r   r  s     r   r   MainGUI.r1_changed^  r  r   c                     US;  aV  [        U5      S:  a&  SnU R                  R                  [        S5      5        [        U5      U l        U R                  5         g g Nr  r?   r]   )r  rs   r  rf   rD   r   r  s     r   r   MainGUI.e1_changedf  M    %%Qx1}##CJ/AhDG((* &r   c                     US;  aV  [        U5      S:  a&  SnU R                  R                  [        S5      5        [        U5      U l        U R                  5         g g Nr  r`   )r  ru   r  rf   rC   r   r  s     r   r   MainGUI.d1_changedn  M    %%Qx"}##CG,AhDG((* &r   c                     US;  aV  [        U5      S:  a&  SnU R                  R                  [        S5      5        [        U5      U l        U R                  5         g g r  )r  rw   r  rf   rE   r   r  s     r   r   MainGUI.R2_changedv  r  r   c                     US;  aV  [        U5      S:  a&  SnU R                  R                  [        S5      5        [        U5      U l        U R                  5         g g r  )r  rx   r  rf   rF   r   r  s     r   r   MainGUI.r2_changed~  r  r   c                     US;  aV  [        U5      S:  a&  SnU R                  R                  [        S5      5        [        U5      U l        U R                  5         g g r#  )r  ry   r  rf   rH   r   r  s     r   r   MainGUI.e2_changed  r%  r   c                     US;  aV  [        U5      S:  a&  SnU R                  R                  [        S5      5        [        U5      U l        U R                  5         g g r'  )r  rz   r  rf   rG   r   r  s     r   r   MainGUI.d2_changed  r)  r   c                     US;  aV  [        U5      S:  a&  SnU R                  R                  [        S5      5        [        U5      U l        U R                  5         g g r  )r  r|   r  rf   rI   r   r  s     r   r   MainGUI.R3_changed  r  r   c                     US;  aV  [        U5      S:  a&  SnU R                  R                  [        S5      5        [        U5      U l        U R                  5         g g r  )r  r}   r  rf   rJ   r   r  s     r   r   MainGUI.r3_changed  r  r   c                     US;  aV  [        U5      S:  a&  SnU R                  R                  [        S5      5        [        U5      U l        U R                  5         g g r#  )r  r~   r  rf   rL   r   r  s     r   r   MainGUI.e3_changed  r%  r   c                     US;  aV  [        U5      S:  a&  SnU R                  R                  [        S5      5        [        U5      U l        U R                  5         g g r'  )r  r   r  rf   rK   r   r  s     r   r   MainGUI.d3_changed  r)  r   c                 $    U R                  5         g r   r   r  s     r   r   MainGUI.ComboSpirograph_changed      $$&r   c                 $    U R                  5         g r   r;  r  s     r   r    MainGUI.ComboSpirograph2_changed  r=  r   c                 $    U R                  5         g r   r;  r  s     r   r    MainGUI.ComboSpirograph3_changed  r=  r   c                    UR                  5       [        R                  R                  :X  a  [        S   S   [        [        R                  R                  S5      S-  5         U l	        [        S   S   [        [        R                  R                  S5      S-  5         U l
        [        S   S   [        [        R                  R                  S5      S-  5         U l        U R                  5         g g )Nr=   r>   r?   )keyQtKeyKey_Cr   rP   rQ   rR   rS   rT   rU   rV   r   )r   r  s     r   keyPressEventMainGUI.keyPressEvent  s    557bffll"":.r23ryy~~a7H7K3LMDJ#J/3C		q8I"8L4MNDK#J/3C		q8I"8L4MNDK((*	 #r   )-rl   rv   r{   rM   rN   rO   r-   r"   r)   rA   rp   rE   rw   rI   r|   r@   rg   rj   r   r   r   r   r   rT   rU   rV   rC   ru   rG   rz   rK   r   rD   rs   rH   ry   rL   r~   r   rB   rr   rF   rx   rJ   r}   r   )__name__
__module____qualname____firstlineno__r   r   r&   r'   r(   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rG  __static_attributes__ r   r   r   r      s    '&&K*r9h$*"H2+
+
++++++++++++'''+r   r   __main__r  zUsage: %prog [options] files)descriptionusage)/ossysnumpyrQ   
matplotlibPyQt6.QtGuiPyQt6.QtCorePyQt6.QtWidgets!matplotlib.backends.backend_qtaggr   r   r   NavigationToolbarmatplotlib.figurer   matplotlib.pyplotpyplotppargparser   datetimer   r   warningsfilterwarnings	itertoolsyellowbrick.style.palettesr
   r   r   yellowbrick.styler   rcParamsupdater   r   rI  p
parse_argsargsQApplicationargvappformshowexitexecrN  r   r   <module>rr     s          | $  #       !  I I )   y9`gw~  OV  W  Xo+k o+l z3-KLA<<>D
sxx
 C9DIIKHHSXXZ r   