code: def test_FullFactorial(self) -> None:
      generator = FullFactorialGenerator()
      parameter_values = [[1, 2], ["foo", "bar"]]
      generated_points, weights, _ = generator.gen(
          n=-1,
          # pyre-fixme[6]: For 2nd param expected `List[List[Union[None, bool,
          #  float, int, str]]]` but got `List[Union[List[int], List[str]]]`.
          parameter_values=parameter_values,
          objective_weights=np.ones(1),
      )
      expected_points = [[1, "foo"], [1, "bar"], [2, "foo"], [2, "bar"]]
      self.assertEqual(generated_points, expected_points)
      self.assertEqual(
          weights, [1 for _ in range(len(expected_points))]
      )
  
imports: import numpy
  from ax.models.discrete.full_factorial import FullFactorialGenerator
  from ax.utils.common.testutils import TestCase
label_desc: Use image node_id 1 for calling the FullFactorialGeneratorTest obj's underlying member method code with example usage: obj.test_FullFactorial() without return types