code: def build(self):
          
          keys = self._param_grid.keys()
          grid_values = self._param_grid.values()
  
          def to_key_value_pairs(keys, values):
              return [(key, key.typeConverter(value)) for key, value in zip(keys, values)]
  
          return [dict(to_key_value_pairs(keys, prod)) for prod in itertools.product(*grid_values)]
docs: Builds and returns all combinations of parameters specified
          by the param grid.