code: def create_3d_surface(
      np_value_matrix,
      title="3D Surface",
      xlabels=None,
      ylabels=None,
      xtitle="X",
      ytitle="Y",
      ztitle="Z",
      custom_colors=True,
      series=None,
      camera=None,
      comment=None,
      layout_config=None,
  ):
      surface_plot = {
          "data": [
              {
                  "z": np_value_matrix.tolist(),
                  "type": "surface",
                  "contours": {
                      "y": {
                          "show": False,
                          "highlightcolor": "#fff4ff",
                          "project": {"y": True},
                      }
                  },
                  "showscale": False,
              }
          ],
          "layout": {
              "scene": {
                  "xaxis": {
                      "title": xtitle,
                      "showgrid": False,
                      "nticks": 10,
                      "ticktext": xlabels,
                      "tickvals": list(range(len(xlabels)))
                      if xlabels
                      else None,
                  },
                  "yaxis": {
                      "title": ytitle,
                      "showgrid": False,
                      "nticks": 10,
                      "ticktext": ylabels,
                      "tickvals": list(range(len(ylabels)))
                      if ylabels
                      else ylabels,
                  },
                  "zaxis": {
                      "title": ztitle,
                      "nticks": 5,
                  },
              },
              "showlegend": False,
              "title": title
              if not comment
              else (title + "<br><sup>" + comment + "</sup>"),
              "name": series,
          },
      }
      if camera:
          surface_plot["layout"]["scene"]["camera"] = {
              "eye": {"x": camera[0], "y": camera[1], "z": camera[2]}
          }
  
      if custom_colors:
          scale, bar = _get_z_colorbar_data()
          surface_plot["data"][0].update({"colorscale": scale})
          surface_plot["data"][0].update({"colorbar": bar})
  
      if layout_config:
          surface_plot["layout"] = merge_dicts(
              surface_plot["layout"], layout_config
          )
  
      return surface_plot
  
imports: import json
  import numpy
  from ..errors import UsageError
  from ..utilities.dicts import merge_dicts
  from attr import attrs, attrib
label_desc: Use image node_id 7 for calling a global function with example usage: create_3d_surface(np_value_matrix, title, xlabels, ylabels, xtitle, ytitle, ztitle, custom_colors, series, camera, comment, layout_config) and returns: surface_plot