class_docstr: A uniform accessor that wraps data/schemas of varying formats with a
  common :func:`marshal` function.
docstr: Returns the element at the specified column and row index, and
  marshals it into an object compatible with the core engine's
  :func:`fill` method.
  
  If DTYPE_DATE or DTYPE_TIME is specified for a string value, attempt
  to parse the string value or return :obj:`None`.
  
  Args:
      cidx (:obj:`int`)
      ridx (:obj:`int`)
      dtype (:obj:`.libpsppy.t_dtype`)
  
  Returns:
      object or None
docstr_tok: ["Returns","the","element","at","the","specified","column","and","row","index",",","and","marshals","it","into","an","object","compatible","with","the","core","engine's",":","func",":","`","fill","`","method",".","If","DTYPE_DATE","or","DTYPE_TIME","is","specified","for","a","string","value",",","attempt","to","parse","the","string","value","or","return",":","obj",":","`","None","`",".","Args",":","cidx","(",":","obj",":","`","int","`",")","ridx","(",":","obj",":","`","int","`",")","dtype","(",":","obj",":","`",".libpsppy.t_dtype","`",")","Returns",":","object","or","None"]
code: def marshal(self, cidx, ridx, dtype):
      """Returns the element at the specified column and row index, and
      marshals it into an object compatible with the core engine's
      :func:`fill` method.
  
      If DTYPE_DATE or DTYPE_TIME is specified for a string value, attempt
      to parse the string value or return :obj:`None`.
  
      Args:
          cidx (:obj:`int`)
          ridx (:obj:`int`)
          dtype (:obj:`.libpsppy.t_dtype`)
  
      Returns:
          object or None
      """
      column_name = self._names[cidx]
      val = self.get(column_name, ridx)
  
      if val is None:
          return val
  
      # if item implements custom repr, use it
      if hasattr(val, "_psp_repr_"):
          val = val._psp_repr_()
  
      # first, check for numpy nans without using numpy.isnan as it tries to
      # cast values
      if isinstance(val, float) and isnan(val):
          return None
  
      elif isinstance(val, list) and len(val) == 1:
          # strip out values encased lists
          val = val[0]
  
      elif dtype == t_dtype.DTYPE_STR:
          if isinstance(val, (bytes, bytearray)):
              return val.decode("utf-8")
          else:
              return str(val)
      elif dtype == t_dtype.DTYPE_DATE:
          # return datetime.date
          if isinstance(val, str):
              parsed = self._date_validator.parse(val)
              return self._date_validator.to_date_components(parsed)
          else:
              return self._date_validator.to_date_components(val)
      elif dtype == t_dtype.DTYPE_TIME:
          # return unix timestamps for time
          if isinstance(val, str):
              parsed = self._date_validator.parse(val)
              return self._date_validator.to_timestamp(parsed)
          else:
              return self._date_validator.to_timestamp(val)
      elif dtype == t_dtype.DTYPE_BOOL:
          # True values are y, yes, t, true, on and 1; false values are n, no,
          # f, false, off and 0.
          return bool(strtobool(str(val)))
      elif dtype == t_dtype.DTYPE_INT32 or dtype == t_dtype.DTYPE_INT64:
          if not isinstance(val, bool) and isinstance(
              val, (float, numpy.floating)
          ):
              # update int columns with either ints or floats
              return int(val)
      elif (
          dtype == t_dtype.DTYPE_FLOAT32
          or dtype == t_dtype.DTYPE_FLOAT64
      ):
          if not isinstance(val, bool) and isinstance(
              val, _PerspectiveAccessor.INTEGER_TYPES
          ):
              # update float columns with either ints or floats
              return float(val)
      return val
  
imports: from distutils.util import strtobool
  from math import isnan
  import numpy
  import pandas
  from ..core.data import deconstruct_numpy, deconstruct_pandas, make_null_mask
  from ..core.data.pd import _parse_datetime_index
  from ..core.exception import PerspectiveError
  from ._date_validator import _PerspectiveDateValidator
  from .libpsppy import t_dtype
label_desc: Use image node_id 9 for calling the _PerspectiveAccessor obj's underlying member method code with example usage: obj.marshal(cidx, ridx, dtype) and returns: val, val, None, val, str, self, self, self, self, bool, int, float