code: def test_trame(client_type):
      # give different names for servers so different instances are created
      name = (
          f"{pv.global_theme.trame.jupyter_server_name}-{client_type}"
      )
      pv.set_jupyter_backend("trame")
      elegantly_launch(name, client_type=client_type)
      server = get_server(name=name)
      assert server.running
  
      pl = pv.Plotter(notebook=True)
      actor = pl.add_mesh(pv.Cone())
      widget = pl.show(return_viewer=True)
      assert isinstance(widget, Widget)
  
      if pv.global_theme.trame.server_proxy_enabled:
          assert pv.global_theme.trame.server_proxy_prefix in widget.src
      else:
          assert "http://" in widget.src
  
      viewer = get_viewer(pl)
  
      for cp in ["xy", "xz", "yz", "isometric"]:
          exec(f"viewer.view_{cp}()")
          cpos = list(pl.camera_position)
          pl.camera_position = cp[:3]
          assert cpos == pl.camera_position
  
      orig_value = actor.prop.show_edges
      server.state[viewer.EDGES] = not orig_value
      viewer.on_edge_visiblity_change(**server.state.to_dict())
      assert actor.prop.show_edges != orig_value
  
      server.state[viewer.GRID] = True
      assert len(pl.actors) == 1
      viewer.on_grid_visiblity_change(**server.state.to_dict())
      assert len(pl.actors) == 2
      server.state[viewer.GRID] = False
      viewer.on_grid_visiblity_change(**server.state.to_dict())
      assert len(pl.actors) == 1
  
      server.state[viewer.OUTLINE] = True
      assert len(pl.actors) == 1
      viewer.on_outline_visiblity_change(**server.state.to_dict())
      assert len(pl.actors) == 2
      server.state[viewer.OUTLINE] = False
      viewer.on_outline_visiblity_change(**server.state.to_dict())
      assert len(pl.actors) == 1
  
      server.state[viewer.AXIS] = True
      assert not hasattr(pl.renderer, "axes_actor")
      viewer.on_axis_visiblity_change(**server.state.to_dict())
      assert hasattr(pl.renderer, "axes_actor")
      server.state[viewer.AXIS] = False
      viewer.on_axis_visiblity_change(**server.state.to_dict())
      assert not pl.renderer.axes_widget.GetEnabled()
  
      server.state[viewer.SERVER_RENDERING] = False
      viewer.on_rendering_mode_change(**server.state.to_dict())
      server.state[viewer.SERVER_RENDERING] = True
      viewer.on_rendering_mode_change(**server.state.to_dict())
  
      assert viewer.actors == pl.actors
  
      # Test update methods
      viewer.update_image()
      viewer.reset_camera()
      viewer.push_camera()
      assert len(viewer.views) == 1
  
      viewer.export()
  
      assert isinstance(viewer.screenshot(), memoryview)
  
imports: import os
  from IPython.display import IFrame
  import numpy
  import pytest
  import pyvista
  from pyvista import examples
label_desc: Use image node_id 5 for calling a global function with example usage: test_trame(client_type) without return types