code: def choice(xs, weights=None):
      # npr.choice isn't actually RS -> [a] -> a
      # because it inspects the components to see if they're array-like
      assert xs
      n = len(xs)
      if weights is None:
          i = npr.randint(n)
      else:
          normalizer = float(sum(weights))
          weights = [w / normalizer for w in weights]
          i = npr.choice(range(n), p=weights)
      return xs[i]
  
imports: from collections import namedtuple
  from functools import partial
  import numpy.random
  from absl.testing import absltest
  from absl.testing import parameterized
  import itertools
  import jax.numpy
  from jax import jit, jvp, vjp
  import jax._src.test_util
  from jax import config
  from jax._src.util import unzip2, safe_zip, safe_map
label_desc: Use image node_id 15 for calling a global function with example usage: choice(xs, weights) and returns: xs