code: def test_vectorize_config0():
      p0 = hp_uniform("p0", 0, 1)
      p1 = hp_loguniform("p1", 2, 3)
      p2 = hp_choice("p2", [-1, p0])
      p3 = hp_choice("p3", [-2, p1])
      p4 = 1
      p5 = [3, 4, p0]
      p6 = hp_choice("p6", [-3, p1])
      d = locals()
      d[
          "p1"
      ] = None  # -- don't sample p1 all the time, only if p3 says so
      config = as_apply(d)
  
      N = as_apply("N:TBA")
      expr = config
      expr_idxs = scope.range(N)
      vh = VectorizeHelper(expr, expr_idxs, build=True)
      vconfig = vh.v_expr
  
      full_output = as_apply(
          [vconfig, vh.idxs_by_label(), vh.vals_by_label()]
      )
  
      if 1:
          print("=" * 80)
          print("VECTORIZED")
          print(full_output)
          print("\n" * 1)
  
      fo2 = replace_repeat_stochastic(full_output)
      if 0:
          print("=" * 80)
          print("VECTORIZED STOCHASTIC")
          print(fo2)
          print("\n" * 1)
  
      new_vc = recursive_set_rng_kwarg(
          fo2, as_apply(np.random.default_rng(1))
      )
      if 0:
          print("=" * 80)
          print("VECTORIZED STOCHASTIC WITH RNGS")
          print(new_vc)
  
      Nval = 10
      foo, idxs, vals = rec_eval(new_vc, memo={N: Nval})
  
      print("foo[0]", foo[0])
      print("foo[1]", foo[1])
      assert len(foo) == Nval
      if 0:  # XXX refresh these values to lock down sampler
          assert foo[0] == {
              "p0": 0.39676747423066994,
              "p1": None,
              "p2": 0.39676747423066994,
              "p3": 2.1281244479293568,
              "p4": 1,
              "p5": (3, 4, 0.39676747423066994),
          }
      assert (foo[1].keys() != foo[2].keys()) or (
          foo[1].values() != foo[2].values()
      )
  
      print(idxs)
      print(vals["p3"])
      print(vals["p6"])
      print(idxs["p1"])
      print(vals["p1"])
      assert len(vals["p3"]) == Nval
      assert len(vals["p6"]) == Nval
      assert len(idxs["p1"]) < Nval
      p1d = dict(list(zip(idxs["p1"], vals["p1"])))
      for ii, (p3v, p6v) in enumerate(zip(vals["p3"], vals["p6"])):
          if p3v == p6v == 0:
              assert ii not in idxs["p1"]
          if p3v:
              assert foo[ii]["p3"] == p1d[ii]
          if p6v:
              print("p6", foo[ii]["p6"], p1d[ii])
              assert foo[ii]["p6"] == p1d[ii]
  
file_path: hyperopt/hyperopt/tests/unit/test_vectorize.py
imports: import numpy
  from hyperopt.pyll import as_apply, scope, rec_eval, clone, dfs
  from hyperopt.pyll.stochastic import recursive_set_rng_kwarg
  from hyperopt import base, fmin, rand
  from hyperopt.vectorize import VectorizeHelper
  from hyperopt.vectorize import replace_repeat_stochastic
  from hyperopt.pyll_utils import hp_choice
  from hyperopt.pyll_utils import hp_uniform
  from hyperopt.pyll_utils import hp_quniform
  from hyperopt.pyll_utils import hp_loguniform
  from hyperopt.pyll_utils import hp_qloguniform
label_desc: Use image node_id 6 for calling a global function with example usage: test_vectorize_config0() without return types