code: def assert_front_end_relayout_request(relayout_request: Request):
      relayout_body = json.loads(relayout_request.body)
      assert (
          "inputs" in relayout_body
          and len(relayout_body["inputs"]) == 1
      )
      assert relayout_body["inputs"][0]["id"] == "resample-figure"
      assert relayout_body["inputs"][0]["property"] == "relayoutData"
      assert all(
          k in relayout_body["inputs"][0]["value"]
          for k in [
              "annotations",
              "template",
              "title",
              "legend",
              "xaxis",
              "yaxis",
          ]
      )
  
      relayout_response_body = json.loads(
          relayout_request.response.body
      )["response"]
      # the relayout response its updateData should be an empty dict
      # { "response": { "trace-updater": { "updateData": [ {} ] } } }
      updateData = relayout_response_body["trace-updater"]["updateData"]
      assert len(updateData) == 1
      assert updateData[0] == {}
  
imports: from __future__ import annotations
  import json
  import time
  from typing import List, Union
  from selenium.webdriver.common.action_chains import ActionChains
  from selenium.webdriver.common.by import By
  from selenium.webdriver.support import expected_conditions
  from selenium.webdriver.support.ui import WebDriverWait
  from seleniumwire import webdriver
  from seleniumwire.request import Request
  from .utils import not_on_linux
label_desc: Use image node_id 3 for calling the RequestParser obj's underlying member method code with example usage: obj.assert_front_end_relayout_request(relayout_request) without return types