class_docstr: Create an experiment with time/memory checkpoints
code: def _data_format(
      self,
      cpu_ram_avail,
      cpu_ram_cons,
      cpu_ram_recl,
      gpu_ram_avail,
      gpu_ram_cons,
      gpu_ram_recl,
  ):
      if self.backend == "cpu":
          return IPyExperimentData(
              IPyExperimentMemory(
                  cpu_ram_cons, cpu_ram_recl, cpu_ram_avail
              ),
              IPyExperimentMemory(0, 0, 0),
          )
      else:
          return IPyExperimentData(
              IPyExperimentMemory(
                  cpu_ram_cons, cpu_ram_recl, cpu_ram_avail
              ),
              IPyExperimentMemory(
                  gpu_ram_cons, gpu_ram_recl, gpu_ram_avail
              ),
          )
  
imports: import gc
  import logging
  import os
  import psutil
  import sys
  import threading
  import time
  import weakref
  from IPython import get_ipython
  from IPython.core.magics.namespace import NamespaceMagics
  from collections import namedtuple
  from .cell_logger import CellLogger, b2mb, int2width, get_nvml_gpu_id
label_desc: Use image node_id 20 for calling the IPyExperiments obj's underlying member method code with example usage: obj._data_format(cpu_ram_avail, cpu_ram_cons, cpu_ram_recl, gpu_ram_avail, gpu_ram_cons, gpu_ram_recl) and returns: IPyExperimentData, IPyExperimentData