code: def get_variables_and_point_fn(
      model: Model, initial_point: Mapping[str, np.ndarray]
  ) -> Tuple[List[mcb.Variable], PointFunc]:
      """Get metadata on free, value and deterministic model variables."""
      # The samplers act only on the inputs needed for the log-likelihood,
      # but the user is interested in transformed variables and deterministics.
      vvars = model.value_vars
      vars = model.unobserved_value_vars
      # Below we compilt the "point function" that transforms a draw to the set
      # of untransformed, transformed and deterministic variables that will be traced.
      point_fn = model.compile_fn(
          vars, inputs=vvars, on_unused_input="ignore", point_fn=True
      )
      point_fn = cast(PointFunc, point_fn)
      point = point_fn(initial_point)
  
      names = [v.name for v in vars]
      dtypes = [v.dtype for v in vars]
      shapes = [v.shape for v in point]
      deterministics = {d.name for d in model.deterministics}
      variables = [
          mcb.Variable(
              name=name,
              dtype=str(dtype),
              shape=list(shape),
              dims=list(model.named_vars_to_dims.get(name, [])),
              is_deterministic=name in deterministics,
          )
          for name, dtype, shape in zip(names, dtypes, shapes)
      ]
      return variables, point_fn
  
imports: import base64
  import logging
  import pickle
  from typing import Any, Dict, List, Mapping, Optional, Sequence, Tuple, Union, cast
  import hagelkorn
  import mcbackend
  import numpy
  from mcbackend.npproto.utils import ndarray_from_numpy
  from pytensor.compile.sharedvalue import SharedVariable
  from pytensor.graph.basic import Constant
  from pymc.backends.base import IBaseTrace
  from pymc.model import Model
  from pymc.pytensorf import PointFunc
  from pymc.step_methods.compound import BlockedStep, CompoundStep, StatsBijection, check_step_emits_tune, flat_statname, flatten_steps
label_desc: Use image node_id 2 for calling a global function with example usage: get_variables_and_point_fn(model, initial_point) and returns: variables,  point_fn