class_docstr: Responsible for generating samples of the leaf node predictions
  Essentially just draws from a normal distribution with prior specified by model parameters
  
  Uses a cache of draws from a normal(0, 1) distribution to improve sampling performance
code: def step(self, model: Model, node: LeafNode) -> float:
      sampled_value = self.sample(model, node)
      node.set_value(sampled_value)
      return sampled_value
  
file_path: imodels/imodels/experimental/bartpy/samplers/leafnode.py
imports: import numpy
  from ..model import Model
  from ..node import LeafNode
  from ..samplers.sampler import Sampler
  from ..samplers.scalar import NormalScalarSampler
label_desc: Use image node_id 2 for calling the LeafNodeSampler obj's underlying member method code with example usage: obj.step(model, node) and returns: sampled_value