content: import math
  import unittest
  from unittest.mock import patch
  
  from pyecharts import options as opts
  from pyecharts.charts import Surface3D
  from pyecharts.faker import Faker
  
  
  class TestSurface3DChart(unittest.TestCase):
      @patch("pyecharts.render.engine.write_utf8_html_file")
      def test_surface3d_base(self, fake_writer):
          def surface3d_data():
              for t0 in range(-60, 60, 1):
                  y = t0 / 60
                  for t1 in range(-60, 60, 1):
                      x = t1 / 60
                      if math.fabs(x) < 0.1 and math.fabs(y) < 0.1:
                          z = "-"
                      else:
                          z = math.sin(x * math.pi) * math.sin(y * math.pi)
                      yield [x, y, z]
  
          c = (
              Surface3D()
              .add(
                  "",
                  list(surface3d_data()),
                  xaxis3d_opts=opts.Axis3DOpts(type_="value"),
                  yaxis3d_opts=opts.Axis3DOpts(type_="value"),
                  grid3d_opts=opts.Grid3DOpts(width=100, height=100, depth=100),
              )
              .set_global_opts(
                  visualmap_opts=opts.VisualMapOpts(
                      max_=3, min_=-3, range_color=Faker.visual_color
                  )
              )
          )
          c.render()
          _, content = fake_writer.call_args[0]
          self.assertEqual(c.theme, "white")
          self.assertEqual(c.renderer, "canvas")
  