code: def test_TileFitted(self) -> None:
      model = get_modelbridge(status_quo_name=None)
  
      # Should throw if `status_quo_arm` is None and rel=True
      with self.assertRaises(ValueError):
          tile_fitted(model, rel=True)
      tile_fitted(model, rel=False)
  
      model = get_modelbridge(status_quo_name="1_1")
      config = tile_fitted(model, rel=True)
      self.assertIsNotNone(config)
  
      for key in ["layout", "data"]:
          self.assertIn(key, config.data)
  
      # Layout
      for key in [
          "annotations",
          "margin",
          "hovermode",
          "updatemenus",
          "font",
          "width",
          "height",
          "legend",
      ]:
          self.assertIn(key, config.data["layout"])
  
      # Data
      for i in range(2):
          self.assertEqual(config.data["data"][i]["x"], ["1_1"])
          self.assertEqual(config.data["data"][i]["y"], [0.0])
          self.assertEqual(config.data["data"][i]["type"], "scatter")
          self.assertEqual(
              config.data["data"][i]["error_y"]["array"],
              [138.59292911256333],
          )
          self.assertIn("Arm 1_1", config.data["data"][i]["text"][0])
          self.assertIn(
              "[-138.593%, 138.593%]", config.data["data"][i]["text"][0]
          )
          self.assertIn("0.0%", config.data["data"][i]["text"][0])
  
          for key in [
              "type",
              "x",
              "y",
              "marker",
              "mode",
              "name",
              "text",
              "hoverinfo",
              "error_y",
              "visible",
              "legendgroup",
              "showlegend",
              "xaxis",
              "yaxis",
          ]:
              self.assertIn(key, config.data["data"][i])
  
file_path: Ax/ax/plot/tests/test_tile_fitted.py
imports: from typing import Optional
  from unittest import mock
  from ax.core.arm import Arm
  from ax.core.metric import Metric
  from ax.core.search_space import SearchSpace
  from ax.modelbridge.base import ModelBridge
  from ax.models.discrete.full_factorial import FullFactorialGenerator
  from ax.plot.scatter import tile_fitted, tile_observations
  from ax.utils.common.testutils import TestCase
  from ax.utils.testing.core_stubs import get_data, get_experiment, get_experiment_with_data, get_search_space
  from ax.utils.testing.modeling_stubs import get_observation
label_desc: Use image node_id 1 for calling the TileFittedTest obj's underlying member method code with example usage: obj.test_TileFitted() without return types