
    ek5                        d dl Z d dlZd dlZd dlmZ d dlmZ d dlZd dl	Z		 d dl
Z
n# e$ r dZ
Y nw xY w	 d dlZn# e$ r dZY nw xY wd dlmZ d dlmZmZmZmZ d dlmZmZmZ d dlmZmZmZ e	j                            e
du d	          Ze	j                            d
d	          Z d Z!e	j"        d             Z#d Z$d Z%d Z&ed             Z'd Z(ed             Z)e	j        *                    d	          d             Z+ee	j                            ej,        dk    d	          d                         Z-ed             Z.ed             Z/e d             Z0ed             Z1ed             Z2ed             Z3dS )    N)BytesIO)ZipFile)ColorBar)VTKAxes	VTKJSPlotVTKSynchronizedPlotVTKVolumePlot)VTKPaneBase	VTKVolume)VTKJSVTKRenderWindowVTKRenderWindowSynchronizedzrequires vtk)reasonTzrequires pyvistac                     t          j                    } t          j                    }|                    |                                            t          j                    }|                    |           t          j                    }|                    d           t          j                    }|                    |                                           t          j	                    }|                    |           t          j
                    }|                    |           |                    |           |                    |                                           t          j                    }|                    |           |S )NOrigin)vtkvtkConeSourcevtkPolyDataMapperSetInputConnectionGetOutputPortvtkActor	SetMappervtkVectorTextSetTextvtkFollowervtkRendererAddActor	SetCameraGetActiveCameravtkRenderWindowAddRenderer)cone
coneMapper	coneActortext
textMapper	textActorrenrenWins           9lib/python3.11/site-packages/panel/tests/pane/test_vtk.pymake_render_windowr,   #   sF   D&((J!!$"4"4"6"6777I
### DLL&((J!!$"4"4"6"6777!!I
###
/

CLLLL++--... ""F
sM    c               #   j  K   ddl m}  t          j                    }|                                 }|                                 }|                                 }|j        dddf         }||j        d<   |	                    d           |	                    d           |
                    ddgd	
          }|                                }t          j                    }|                    d|           t          j                    }	|	                    |           t          j                    }
|
                    |           |
                    |           |
                    |           |
                    |	           |
                    |           |
j        V  t          j                     dS )zD
    Allow to download and create a more complex example easily
    r   )examplesN   valueszSpatial Cell Datag333333?      ?T)invert)pyvistar/   pvSphere
load_globedownload_headload_uniformpoints
point_dataset_active_scalarsthreshold_percentsplit_bodiesr   vtkCompositePolyDataMapper2SetInputDataObjectr   r   Plotteradd_mesh	add_actor
add_volumeren_win	close_all)r/   sphereglobeheaduniformscalarsthreshedbodiesmapper
multiblockpls              r+   pyvista_render_windowrQ   <   s     
 !     Y[[F!!E!!##D##%%GmAAAqD!G")Fh
h'''2333 (($d(CCH""$$F,..F
a(((J   	BKKKKKKLLMM$
*LNNNNNr-   c                     t          j                    } |                     ddd           |                     t           j        d           |                                 }t          |d                   D ]g}t          |d                   D ]O}t          |d                   D ]7}|                     |||dt          j	        
                                           8Ph| S )N            r0   r   )r   vtkImageDataSetDimensionsAllocateScalars
VTK_DOUBLEGetDimensionsrangeSetScalarComponentFromDoublenprandomrand)
image_datadimszyxs        r+   make_image_datarf   ^   s    !##JQ1%%%s~q111##%%D 47^^ V VtAw 	V 	VA47^^ V V771aBINNDTDTUUUUV	V r-   c                  D    d} t          j        |           t          u sJ d S )NQhttps://raw.githubusercontent.com/Kitware/vtk-js/master/Data/StanfordDragon.vtkjsr   get_pane_typer   )urls    r+   !test_get_vtkjs_pane_type_from_urlrl   m   s)    
^C!#&&%//////r-   c                  D    d} t          j        |           t          u sJ d S )NzStanfordDragon.vtkjsri   )files    r+   "test_get_vtkjs_pane_type_from_filero   r   s)    "D!$''5000000r-   c                      t          j        t          j                              t          u sJ t          j        t          j                    d          t
          u sJ d S )NTserialize_on_instantiation)r   rj   r   r!   r   r    r-   r+   )test_get_vtk_pane_type_from_render_windowrt   w   sZ    !#"5"7"788<WWWWW!#"5"7"7TXYYY]lllllllr-   c                      t          j        t          j        g                               d                    t
          u sJ d S )Nr   r   r   )r   rj   r^   arrayreshaper   rs   r-   r+   'test_get_vtkvol_pane_type_from_np_arrayry   }   s:    !"(2,,"6"6w"?"?@@IMMMMMMr-   c                  \    t                      } t          j        |           t          u sJ d S N)rf   r   rj   r   )ra   s    r+   (test_get_vtkvol_pane_type_from_vtk_imager|      s/     ""J!*--::::::r-   z+vtk=9.0.1=no_osmesa not currently availablec                    d}t          |          }|                    | |          }t          |t                    sJ |j        |j        d                  d         |u sJ t          |j        t                    sJ t          t          j
        |j                                                            5 }t          |          5 }|                                }t          |          dk    sJ d|v sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        j        |                    d          j         }	|                    |	           t+          |	d	          5 }
|
|_        d d d            n# 1 swxY w Y   t          |	          }|                    | |          }t          |t.                    sJ t          |t                    sJ d S )
Nrh   commidr   	   zStanfordDragon.obj/index.jsonzexport.vtkjsfilenamerb)r
   get_root
isinstancer   _modelsrefdatastrr   base64	b64decodeencoder   namelistlenospathjoinjoinpathpartsexport_vtkjsopenobjectr   )documentr   tmp_pathrk   pane_from_urlmodel	in_memoryzf	filenamestmpfilefile_exportedpane_from_filemodel_from_files                r+   test_vtkjs_paner      s    _CHHM ""8$"77EeY''''' 41!4====ej#&&&&&	!%*"3"3"5"566	7	7 @9Y 	@2Iy>>Q&&&&2i?????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ glH--n==CDG000	gt		 -,- - - - - - - - - - - - - - - \\N$--hT-BBOne,,,,,oy1111111sH   6D0D7DD	D
D	DD!D6F

FFwin32zcache cleanup fails on windowsc                    t                      }t          |          }|                    | |          }t          |t                    sJ |j        |j        d                  d         |u sJ |j        |j                 }t          |j
                                                  dk    sJ |                                 t          |j
                                                  dk    sJ |                    d           t          |j
                                                  dk    sJ |                    |           |j        i k    sJ |j        i k    sJ d S )Nr~   r   r   rU   )r,   r
   r   r   r   r   r   	_contextsr   r   dataArrayCachekeysremove_all_actorscheckForArraysToRelease_cleanup)r   r   r*   paner   ctxs         r+   test_vtk_pane_from_renwinr      sY     !!Fv;;D MM(M..Ee011111<	$(+u4444 .
"Cs!&&(())Q....s!&&(())Q...."""s!&&(())Q.... 	MM%>R<2r-   c                    t                      }t          |d          }t          |t                    sJ |                    | |          }t          |t
                    sJ |j                            d           t          j	        j
        |                    d          j         }|                    |          }|                    d          sJ t          j        |d	          }t          |t                    sJ d S )
NTrq   r~   r   scener   .synchF)r   synchronizable)r,   r
   r   r   r   r   paramtriggerr   r   r   r   r   export_sceneendswithimport_scene)	r   r   r   r*   r   r   r   exported_fileimported_panes	            r+   #test_vtk_serialize_on_instantiationr      s   !!Fv$777DdO,,,,,MM(M..Ee011111Jx    glH--g66<=G%%w%77M!!(+++++ $m49; ; ;Mm_5555555r-   c                    t                      }t                      }t          |          }t          |          }t          |t                    sJ t          |t                    sJ |                    | |          }|                    | |          }t          |t
                    sJ t          |t
                    sJ t          |j                  dk    sJ t          |j                  dk    sJ |j        d         |j        d         usJ |                    |j                   t          |j                  dk    sJ |j        d         |j        d         u sJ |j        d         }|	                    |j        d         g           |j        d         |j        d         u sJ |                    |g           t          |j                  dk    sJ |
                                 t          |j                  dk    sJ |j        }	|j        |	usJ |                    |           |j        |	u sJ |                                 |j        |	usJ |                    ddd           t          |                                          d                                         dk    sJ |                    |           |                    |           d S )Nr~   r0   r   rT   rS   rV   rv   )r,   r
   r   r   r   r   r   actors
add_actorsremove_actorsr   
vtk_cameralink_cameraunlink_cameraset_backgroundlistGetRenderersGetBackgroundr   )
r   r   renWin1renWin2pane1pane2model1model2
save_actorsave_vtk_camera2s
             r+   test_vtk_sync_helpersr      s    ""G ""G LLELLEe899999e899999 ^^H4^00F^^H4^00Ff122222f122222 u|!!!!u|!!!!<?%,q/1111 
U\"""u|!!!!<?el1o---- aJ	a)***<?el1o---- 
j\"""u|!!!!	u|!!!! '#33333	e///// 
#33333 
Aq!!!$$&&''*88::iGGGG 
NN6	NN6r-   c                    t          |           }|                    ||          }t          |t                    sJ |j        |j        d                  d         |u sJ |                                j        }t          |j	                  dk    sJ t          d |j	        D                       sJ |                    d                                          }t          |j	                  dk    sJ t          d	 |j	        D                       sJ t          g d
dt          j        ddd          idt          j        ddd          it          j        ddd          dgd t          j        ddd          dd          D             z   ddddd          |_        t          |j        t                    sJ t!          j        j        |                    d          j         }|                    |          }	|	                    d          sJ t          j        |	          }
t          |
t0                    sJ |                    |           |j        i k    sJ |j        i k    sJ d S )Nr~   r   r   r0   c              3   @   K   | ]}t          |t                    V  d S r{   r   r   .0cbs     r+   	<genexpr>z-test_vtk_pane_more_complex.<locals>.<genexpr>  s,      JJBz"h''JJJJJJr-   F)inferrS   c              3   @   K   | ]}t          |t                    V  d S r{   r   r   s     r+   r   z-test_vtk_pane_more_complex.<locals>.<genexpr>"  s,      KKBz"h''KKKKKKr-   )rU   ticksr   rU   r    c                 F    g | ]}t          t          |                    S rs   )r   int)r   items     r+   
<listcomp>z.test_vtk_pane_more_complex.<locals>.<listcomp>)  s$    $X$X$XST^^$X$X$Xr-   rV   )r   labels   r2   T)originxtickerytickerztickerfontsizedigitsgrid_opacity	show_gridr   r   r   )r
   r   r   r   r   r   construct_colorbarsr   r   belowalldictr^   linspaceaxesr   r   r   r   r   r   r   r   r   r   r   r   )rQ   r   r   r   r   r   colorbars_inferedcolorbars_in_scener   r   imported_scenes              r+   test_vtk_pane_more_complexr     s   $%%D MM(M..Ee011111<	$(+u444400229 &''1,,,,JJ2C2IJJJJJJJJ111>>EEGG!'((A----KK2D2JKKKKKKKKBK1Q//0BK1Q//0K1Q// T$X$XBqQR@S@STUTVTV@W$X$X$XXZ Z
 
 
DI ej'***** glH--g66<=G%%w%77M!!(+++++ %}===Nn&ABBBBB 	MM%>R<2r-   c                 :   t                                          | |          t          j        d          _        ddlm t          t                    sJ j	        j
        d                  d         u sJ t          j        t          j        t          j        j        d                                                             dk              sJ t          fdd	D                       sJ d
t          j        d          z  _        t          j        t          j        t          j        j        d                                                             d
k              sJ d_        dt          j                            ddd          z                      t          j                  }|j        dz  dk    sJ |_        t          j        t          j        j        d                                                             }|j        dz  dk    sJ t          j                            ddd          }|j        dz  dk    sJ |_        t          j        t          j        j        d                                                   t          j                  }|j        dz  dk    sJ                     dt          j        |j                  dz
  d
z  i          }|ddik    sJ                                j	        i k    sJ d S )Nr~   )
   r   r   r   eqr   bufferrV   c           	      `    g | ]*} t          |          t          |                    +S rs   getattrr   kr   r   r   s     r+   r   z2test_vtkvol_pane_from_np_array.<locals>.<listcomp>N  I     < < < 74##WUA%6%677 < < <r-   slice_islice_jslice_kr0   皙?   2   g    .Adtyper      )r   r   r^   onesr   operatorr   r   r	   r   r   r   
frombufferr   r   r   r   max_data_sizer_   r`   astypeuint8nbytesfloat64_process_property_changecbrtsizer   )r   r   r   
data_modelr   r   r   r   s        @@@r+   test_vtkvol_pane_from_np_arrayr  A  s    ;;DMM(M..E'*%%DK e]+++++<	$(+u44446"- 0H1E1L1L1N1N O OPPTUUVVVVV < < < < < <:< < < = = = = = BGJ'''DK6"- 0H1E1L1L1N1N O OPPTUUVVVVV D	r"R(((00::D;s?S    DKv/
80D0K0K0M0MNNOOJS C''''9>>"R##D;s?S    DKv/
80D0K0K0M0MNNVXV`aaaJS C'''' ))9rwz7O7OPQ7QTU6U*VWWEY	***** 	MM%<2r-   c                 t   t                      }t          |          ddlm                     | |          t          t                    sJ j        j        d                  d         u sJ t          fddD                       sJ 
                               j        i k    sJ d S )Nr   r   r~   r   c           	      `    g | ]*} t          |          t          |                    +S rs   r   r   s     r+   r   z4test_vtkvol_pane_from_image_data.<locals>.<listcomp>w  r   r-   r   )rf   r   r
  r   r   r   r	   r   r   r   r   )r   r   ra   r   r   r   s      @@@r+    test_vtkvol_pane_from_image_datar  m  s     ""JZ  D MM(M..Ee]+++++<	$(+u4444 < < < < < <:< < < = = = = = 	MM%<2r-   c                    ddl m} t          j        g dt          j                  }d|ddddddf<   d|dddd	dd	f<   d
|ddddddf<   d}d}t          j        |          }t          j        |          }t          j                    } |j	        |j
           |j        |   |j        |  |                    |                    d                    }	|                                                    |	           t#          |||          }
t#          |||          }t#          |          }|
j        |j        cxk    r|j        cxk    r|k    sn J |
                                }|                                }|                                }t          j        t+          j        |d                   |d                                       |d         d          }t          j        ||k              sJ ||cxk    r|k    sn J t#          |||d          }t#          |||d          }t#          |d          }|j        |j        cxk    r|j        cxk    r|k    sn J |                                }|                                }|                                }||cxk    r|k    sn J d S )Nr   )numpy_support)r  K   d   r  r  #   r     7      -   J   )r   r      )rS   r0   rV   F)order)r   spacingr   r  rb   r  )r   r&  r  )r  )vtk.utilr  r^   zerosr  ascontiguousarrayasfortranarrayr   rW   rX   shape	SetOrigin
SetSpacingnumpy_to_vtkravelGetPointData
SetScalarsr   _sub_spacing_get_volume_datar  r   r   rx   alltrue)r   r   r  data_matrixr   r&  data_matrix_cdata_matrix_fra   vtk_arrp_cp_fp_idvd_cvd_fvd_iddata_decodedp_c_dsp_f_dsp_id_dsvd_c_dsvd_f_dsvd_id_dss                          r+   #test_vtkvol_serialization_coherencerF  }  s7   &&&&&&(===999K$&K"adAbD !'*K2r"ube#$(+K2r"ubf$%FG(55M%k22M!##JJk/00J&!!J7##(():):):)E)EFFG((111
M&'
B
B
BC
M&'
B
B
BCZ  Ds/OOOO43DOOOOOOOOOO!!D!!D!!##E=!1$x.!A!AgWWW__`dek`ltw_xxL:lK/00000D    D       }VWTWXXXF}VWTWXXXF
#666G&"5XXXX9MXXXXQXXXXXXX%%''G%%''G''))Hw))))'))))))))r-   )4r   r   sysior   zipfiler   numpyr^   pytestr   	Exceptionr4   r5   bokeh.modelsr   panel.models.vtkr   r   r   r	   
panel.paner
   r   r   panel.pane.vtk.vtkr   r   r   markskipifvtk_availablepyvista_availabler,   fixturerQ   rf   rl   ro   rt   ry   r|   skipr   platformr   r   r   r   r  r  rF  rs   r-   r+   <module>rX     sm    				 



                 JJJJ   
CCC   	BBB " ! ! ! ! !            0 / / / / / / / / /          ""3$;~"FFK&&tEW&XX   2   B  0 0 0
1 1 1
 m m m
N N N ; ; ; FGG2 2 HG2> CLG+4TUU  VU 2 6 6 6* 7 7 7t + + +\ ( ( (V    (* (* (* (* (*s   ' 11: AA