code: def make_table(df: pd.DataFrame, wrap_long_string=None) -> str:
      def map_to_td(value) -> str:
          if isinstance(value, float):
              if value is None or not math.isfinite(value):
                  value = "&nbsp;"
              else:
                  value = f"{value:.4f}"
              return f"<td class='upgini-number'>{value}</td>"
          elif isinstance(value, int):
              if value is None:
                  value = "&nbsp;"
              return f"<td class='upgini-number'>{value}</td>"
          else:
              if value is None or len(value) == 0 or value == "nan":
                  value = "&nbsp;"
              elif (
                  wrap_long_string is not None
                  and len(value) > wrap_long_string
                  and " " not in value
              ):
                  value = "</br>".join(
                      textwrap.wrap(value, wrap_long_string)
                  )
  
              return f"<td class='upgini-text'>{value}</td>"
  
      return (
          "<table class='upgini-df'>"
          + "<thead>"
          + "".join(f"<th>{col}</th>" for col in df.columns)
          + "</thead>"
          + "<tbody>"
          + "".join(
              "<tr>" + "".join(map(map_to_td, row[1:])) + "</tr>"
              for row in df.itertuples()
          )
          + "</tbody>"
          + "</table>"
      )
  
file_path: upgini/src/upgini/utils/display_utils.py
imports: import base64
  import math
  import textwrap
  import urllib.parse
  import uuid
  from datetime import datetime, timezone
  from io import BytesIO
  from typing import Callable, List, Optional
  import pandas
  from xhtml2pdf import pisa
label_desc: Use image node_id 3 for calling a global function with example usage: make_table(df, wrap_long_string) and returns: unknown, str, value, str, str, value, str, str, value, str