code: def write_wrapper_test(self, model):
      ###################
      # write myproject_test_wrapper.cpp
      ###################
      oldfile = f"{model.config.get_output_dir()}/{model.config.get_project_name()}_test.cpp"
      newfile = f"{model.config.get_output_dir()}/{model.config.get_project_name()}_test_wrapper.cpp"
  
      f = open(oldfile)
      fout = open(newfile, "w")
  
      inp = model.get_input_variables()[0]
      out = model.get_output_variables()[0]
  
      for line in f.readlines():
          if f"{model.config.get_project_name()}.h" in line:
              newline = line.replace(
                  f"{model.config.get_project_name()}.h",
                  f"{model.config.get_project_name()}_axi.h",
              )
          elif inp.definition_cpp() in line:
              newline = line.replace(
                  inp.definition_cpp(), "input_axi_t inputs[N_IN]"
              )  # TODO instead of replacing strings, how about we use proper variables and their definition?
          elif out.definition_cpp() in line:
              newline = line.replace(
                  out.definition_cpp(), "output_axi_t outputs[N_OUT]"
              )
          elif "unsigned short" in line:
              newline = ""
          elif f"{model.config.get_project_name()}(" in line:
              indent_amount = line.split(
                  model.config.get_project_name()
              )[0]
              newline = (
                  indent_amount
                  + f"{model.config.get_project_name()}_axi(inputs,outputs);\n"
              )
          elif (
              inp.size_cpp() in line
              or inp.name in line
              or inp.type.name in line
          ):
              newline = (
                  line.replace(inp.size_cpp(), "N_IN")
                  .replace(inp.name, "inputs")
                  .replace(inp.type.name, "input_axi_t")
              )
          elif (
              out.size_cpp() in line
              or out.name in line
              or out.type.name in line
          ):
              newline = (
                  line.replace(out.size_cpp(), "N_OUT")
                  .replace(out.name, "outputs")
                  .replace(out.type.name, "output_axi_t")
              )
          else:
              newline = line
          if (
              self.vivado_accelerator_config.get_interface()
              == "axi_stream"
          ):
              if "nnet::fill_zero" in line:
                  indent = line.split("n")[0]
                  newline = indent + "inputs[N_IN-1].last = 1;\n"
              if "copy_data" in line:
                  newline = newline.replace(
                      "copy_data", "copy_data_axi"
                  )
          fout.write(newline)
  
      f.close()
      fout.close()
      os.rename(newfile, oldfile)
  
      ###################
      # write myproject_bridge_wrapper.cpp
      ###################
      oldfile = f"{model.config.get_output_dir()}/{model.config.get_project_name()}_bridge.cpp"
      newfile = f"{model.config.get_output_dir()}/{model.config.get_project_name()}_bridge_wrapper.cpp"
  
      f = open(oldfile)
      fout = open(newfile, "w")
  
      inp = model.get_input_variables()[0]
      out = model.get_output_variables()[0]
  
      for line in f.readlines():
          if f"{model.config.get_project_name()}.h" in line:
              newline = line.replace(
                  f"{model.config.get_project_name()}.h",
                  f"{model.config.get_project_name()}_axi.h",
              )
          elif inp.definition_cpp(name_suffix="_ap") in line:
              newline = line.replace(
                  inp.definition_cpp(name_suffix="_ap"),
                  f"input_axi_t {inp.name}_ap[N_IN]",
              )
          elif out.definition_cpp(name_suffix="_ap") in line:
              newline = line.replace(
                  out.definition_cpp(name_suffix="_ap"),
                  f"output_axi_t {out.name}_ap[N_OUT]",
              )
          elif f"{model.config.get_project_name()}(" in line:
              indent_amount = line.split(
                  model.config.get_project_name()
              )[0]
              newline = indent_amount + "{}_axi({}_ap,{}_ap);\n".format(
                  model.config.get_project_name(), inp.name, out.name
              )
          elif (
              inp.size_cpp() in line
              or inp.name in line
              or inp.type.name in line
          ):
              newline = line.replace(inp.size_cpp(), "N_IN").replace(
                  inp.type.name, "input_axi_t"
              )
          elif (
              out.size_cpp() in line
              or out.name in line
              or out.type.name in line
          ):
              newline = line.replace(out.size_cpp(), "N_OUT").replace(
                  out.type.name, "output_axi_t"
              )
          else:
              newline = line
          fout.write(newline)
  
      f.close()
      fout.close()
      os.rename(newfile, oldfile)
  
file_path: hls4ml/hls4ml/writer/vivado_accelerator_writer.py
imports: import os
  from distutils.dir_util import copy_tree
  from shutil import copyfile
  from hls4ml.writer.vivado_writer import VivadoWriter
label_desc: Use image node_id 4 for calling the VivadoAcceleratorWriter obj's underlying member method code with example usage: obj.write_wrapper_test(model) without return types