code: def __init__(
      self,
      S: np.ndarray,
      A: np.ndarray,
      upper_bounds: np.ndarray,
      shapes: list[shape_functions.BaseShapeFunction],
      transformations: list[
          list[transformation_functions.BaseTransformations]
      ],
  ) -> None:
      assert all(S > 0)
      assert all((A == 0) + (A == 1))
      assert all(upper_bounds > 0)
  
      self._S = S
      self._A = A
      self._upper_bounds = upper_bounds
      self._shapes = shapes
      self._transformations = transformations
  
imports: from __future__ import annotations
  import math
  import sys
  import numpy
  import shape_functions
  import transformation_functions
  from kurobako import problem
label_desc: Use image node_id 1 to create a new BaseWFG object  with example: obj = BaseWFG(S, A, upper_bounds, shapes, transformations)