code: def _get_scene_boundaries(
      floor: kb.Cube,
      spawn_region: List[Tuple[float, float, float]],
  ) -> Dict[str, List[int]]:
      """Constructs bounding box for all scene-varying content.
  
      This bounding box ostensibly includes the objects themselves and their
      shadows. Due to complexity, a guarantee on this cannot be made. The logic
      here is best-effort.
  
      Args:
        floor: Cube representing the scene's floor. The cube is axis-aligned with
          its top surface lying below all objects in the scene.
        spawn_region: Lower and upper boundaries of a 3D axis-aligned box, inside
          which all foreground objects are guaranteed to lie within.
  
      Returns:
        Dict with two entries, "min" and "max". These entries are 3-element lists
          containing the lower and upper boundaries of a 3D axis-aligned bounding
          box.
      """
      spawn_min, spawn_max = np.asarray(spawn_region)
  
      if not np.allclose(floor.aabbox[1][2], spawn_min[2]):
          raise ValueError(
              "Top of floor and bottom of bounding box be identical."
          )
  
      # Define some amount of buffer volume to the scene's bounding box to
      # encourage shadows on the floor to lie within the scene bounding box.
      boundary_epsilon = 0.1
      scene_min = spawn_min - boundary_epsilon
      scene_max = spawn_max + boundary_epsilon
      return {
          "min": list(scene_min),
          "max": list(scene_max),
      }
  
file_path: kubric/challenges/robust_nerf/worker.py
imports: import collections
  import json
  import logging
  from typing import Dict, List, Optional, Tuple
  import kubric
  import kubric.renderer.blender
  import kubric.simulator.pybullet
  import numpy
  import tensorflow
  import bpy
label_desc: Use image node_id 4 for calling a global function with example usage: _get_scene_boundaries(floor, spawn_region) and returns: dict