
    1i%                    r    d dl mZ d dlZd dlmZ d dlmZ d dlZd-d	Z	d.dZ
	 	 	 d/d0dZ	 d1d2d(Z	 d1d3d,ZdS )4    )annotationsN)Path)Sequence
cache_rootr   returnNonec                    | dz  }|                     dd           t          j                            dt	          |                     d S )N	mplconfigT)parentsexist_okMPLCONFIGDIR)mkdirosenviron
setdefaultstr)r   mpl_dirs     8D:\ml\projects\myproj\tight binding\tb\interactive_3d.py_ensure_runtime_cacher   
   sF    ;&GMM$M...J.#g,,77777    tuple[bool, str]c                    t          |            	 dd l}n2# t          $ r%}dt          |          j         d| fcY d }~S d }~ww xY wdS )Nr   Fz: )T )r   pyvista	Exceptiontype__name__)r   r   excs      r   pyvista_is_availabler      su    *%%%5 5 5 5c+44s44444444458s    
AA A Ai   i\  output_pathtitler   atom_positionsSequence[Sequence[float]]atom_colorsSequence[str]
atom_radiiSequence[float]bonds%Sequence[tuple[int, int, float, str]]point_labelsSequence[str] | Nonelabel_positions Sequence[Sequence[float]] | Nonewindow_sizetuple[int, int]c	                   | j         dz  }	t          |	           dd l}
|
                    d|          }|                    d           t          j        |t                    }|j        dk    s|j	        d         d	k    rt          d
          t          |          t          |          cxk    rt          |          k    sn t          d          t          |||          D ]q\  }}}|
                    t          |          t          |          dd          }|                    ||ddd|d         dd|d         dd|d         d           r|D ]\  }}}}|t!          |                   }|t!          |                   }||z
  }t          t
          j                            |                    }|dk    rid||z   z  }|
                    t          |          t          ||z            t          |          |d          }|                    ||dd           |rH|rFt          j        |t                    }|                    |t+          |          ddddddd	  	         |                    dd           |                    |ddd           |                                 |j                            d            |                    t9          |                      |                                 d S )!N.runtime_cacher   T
off_screenr/   whitedtype         z$atom_positions must be shaped (N, 3)z'atom colors/radii must match atom count$   )radiuscentertheta_resolutionphi_resolutiong333333?zatom-z.3f-)colorsmooth_shadingspecularnameg-q=g      ?)r=   	directionr<   height
resolutiong?)rA   rB   rC      black)
point_size	font_sizealways_visibleshape_opacity
text_color
fill_shapeshape_colorF
line_width
labels_off
upper_edge   positionrK   rA   333333?)parentr   r   Plotterset_backgroundnpasarrayfloatndimshape
ValueErrorlenzipSpheretupleadd_meshintlinalgnormCylinderadd_point_labelslistadd_axesadd_textview_isometriccamerazoomexport_htmlr   close)r!   r"   r#   r%   r'   r)   r+   r-   r/   r   pvplotter	positionsrW   rA   r<   spherestart_index	end_indexstartendvectorlengthr=   cylinderlabel_pointss                             r   export_atomic_scene_htmlr      sL    #&66J*%%%jjDkjBBG7###
>777I~ioa0A55?@@@JAAAA3y>>AAAABCCC#&y+z#J#J 
 
%%--hZ\moppN!NNN8A;NNNXa[NNN 	 	
 	
 	
 	
 27 S S-Y#k**+I'ury~~f--..U??$;;==FVO,,==  
 
 	tcRRRR 
 
z/???   	! 
	
 
	
 
	
 e444U\RwOOONK(()))MMOOOOOr   id  i  	xy_pointslower_energiesupper_energiespolygon_verticesk_pathk_labelsenergy_limitr^   c
                	   | j         dz  }
t          |
           dd l}t          j        |t
                    }t          j        |t
                    }t          j        |t
                    }t          j        |t
                    }t          j        |t
                    }|j        dk    s|j        d         dk    rt          d          t          |          t          |          cxk    rt          |          k    sn t          d          t          j
        |t          j        t          |          t
                    g          }|                    |          }|                    dd	d
          }||d<   ||d<   |                    d          }|j                                        |_        |d         |j        d d df<   |                    d          }|j                                        |_        |d         |j        d d df<   |                    d|	          }|                    d           t          |           t          |          f}|                    |dd|dddddd           |                    |dd|ddd           |                    |                                ddd           |                    |                                ddd           t          j        ||d         g          }|                    t          j
        |t          j        t          |                    g          d          }|                    |dd !           t          j
        |t          j        t          |          t
                    g          }|                    |t-          d"d#t          |          dz
  z                      }|                    |d$d%!           t          j
        |t          j        t          |          t
                    g          }|                    |t1          |          d&d'dd(ddd)	  	         |                    dd*           |                    |d+d,d-           |                                 |j                            d.           |                    t?          |                      |                                  d S )/Nr2   r   r6   r8   r9   zxy_points must be shaped (N, 2)1point and energy arrays must have the same lengthg        gư>g      ?)alphatoloffsetlower_energyupper_energyT)deepr3   r5   coolwarmgQ?Energyr"   vertical)scalarscmapclimrB   opacityshow_scalar_barscalar_bar_argsF)r   r   r   rB   r   r   #1f1f1frX   g      ?rA   rR   r   i  n_pointsrI      rA   rR   x   P   z#2d2d2d      rH   Q?rJ   rK   rL   rM   rO   rP   rN   rQ   rT   rU   rV   g?)!rY   r   r   r\   r]   r^   r_   r`   ra   rb   column_stackzerosPolyDatadelaunay_2dcopypointsrZ   r[   rf   extract_feature_edgesvstackSplinemaxrk   rl   rm   rn   ro   rp   rq   rr   r   rs   )r!   r"   r   r   r   r   r   r   r   r/   r   rt   	points_xylowerupperpolygonpath_pointsbase_points
base_cloudtriangulatedlower_surfaceupper_surfaceru   r   polygon_looppolygon_polylinezero_plane_path
path_curvepath_labels_3ds                                r   export_reciprocal_surfaces_htmlr   c   s    #&66J*%%%
9E222IJ~U333EJ~U333Ej)777G*V5111K~ioa0A55:;;;	NNc%jj6666CJJ6666LMMM/9bhs9~~U.S.S.S"TUUK[))J))c)JJL#(L #(L  %%4%00M(/4466M!.~!>MA %%4%00M(/4466M!.~!>MAjjDkjBBG7###<   %"5"56D"*==  	 	 	      ]88::)X[eijjj]88::)X[eijjj9gwqz233Lyy,\IZIZ@[@[1\!]!]hkyll%WCCCo{BHS=M=MUZ4[4[4[&\]]O?SbCDTDTWXDX>Y5Z5Z[[JZyQ???_k28C<L<LTY3Z3Z3Z%[\\NX  
 
 
 e444U\RwOOONK(()))MMOOOOOr   
xyz_pointsvalence_energiesconduction_energiesc	                V   | j         dz  }	t          |	           dd l}
t          j        |t
                    }t          j        |t
                    }t          j        |t
                    }t          j        |t
                    }|j        dk    s|j        d         dk    rt          d          t          |          t          |          cxk    rt          |          k    sn t          d          |

                    d	|
          }|                    d           t          |           t          |          f}|
                    |                                          }||d<   |                    |dd|dd	dd	dd	d	  	         |
                    |                                          }||d<   |                    |dd|dd	dd           t          |d d df                                                   t          |d d df                                                   t          |d d df                                                   t          |d d df                                                   t          |d d df                                                   t          |d d df                                                   f}|
                    |          }|                    |                                ddd           |
                    |t!          ddt          |          dz
  z                      }|                    |dd !           |                    |t+          |          dd"d	d#d	dd$	  	         |                    dd%           |                    |d&d'd(           |                                 |j                            d)           |                    t9          |                      |                                 d S )*Nr2   r   r6   r8   r9   r:   z xyz_points must be shaped (N, 3)r   Tr3   r5   energyr   r   g?r   r   )r   r   r   rJ   render_points_as_spheresr   r   r      g?F)r   r   r   rJ   r   r   r   )boundsrI   g      @g?r      d   r   r   r   r   rH   r   r   rQ   rT   rU   rV   gffffff?)rY   r   r   r\   r]   r^   r_   r`   ra   rb   rZ   r[   r   r   rf   minr   Boxr   r   rk   rl   rm   rn   ro   rp   rq   rr   r   rs   )r!   r"   r   r   r   r   r   r   r/   r   rt   
points_xyzvalence
conductionr   ru   r   valence_cloudconduction_cloudr   boxr   s                         r   export_reciprocal_volume_htmlr      s-    #&66J*%%%Je444Jj)777G/u===J*V5111K!z/2a77;<<<
OOs7||>>>>s:>>>>LMMMjjDkjBBG7###<   %"5"56DKK
 1 122M%M(!%"*==  
 
 
 {{:??#4#455!+X!%  	 	 	 	jA""$$%%jA""$$%%jA""$$%%jA""$$%%jA""$$%%jA""$$%%F &&&

CS..00CY]^^^;S#[AQAQTUAU:V1W1WXXJZyQ???X  
 
 
 e444U\RwOOONK(()))MMOOOOOr   )r   r   r   r   )r   r   r   r   )NNr    )r!   r   r"   r   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r   r   )r   )r!   r   r"   r   r   r$   r   r(   r   r(   r   r$   r   r$   r   r&   r   r^   r/   r0   r   r   )r!   r   r"   r   r   r$   r   r(   r   r(   r   r$   r   r&   r   r^   r/   r0   r   r   )
__future__r   r   pathlibr   typingr   numpyr\   r   r   r   r   r    r   r   <module>r      s    " " " " " " 				                8 8 8 8     *.8<#.G G G G Gh $/^ ^ ^ ^ ^T $/X X X X X X Xr   