code: def _create_parameters_QUANTILE(
      self, begin_index: int, norm_params: List[NormalizationParameters]
  ):
      F = len(norm_params)
  
      num_quantiles = torch.tensor(
          # pyre-fixme[6]: Expected `Sized` for 1st param but got
          #  `Optional[List[float]]`.
          [[float(len(p.quantiles)) - 1 for p in norm_params]],
          device=self.device,
      )
      self._create_parameter(
          begin_index, "num_quantiles", num_quantiles
      )
  
      max_num_quantile_boundaries = int(
          torch.max(
              # pyre-fixme[6]: Expected `Sized` for 1st param but got
              #  `Optional[List[float]]`.
              torch.tensor([len(p.quantiles) for p in norm_params])
          ).item()
      )
      B = max_num_quantile_boundaries
  
      # The quantile boundaries is a FxB matrix where B is the max # of boundaries
  
      # We take advantage of the fact that if the value is >= the max
      # quantile boundary it automatically gets a 1.0 to repeat the max quantile
      # so that we guarantee a square matrix.
  
      # We project the quantiles boundaries to 3d and create a 1xFxB tensor
      quantile_boundaries = torch.zeros(
          [1, len(norm_params), max_num_quantile_boundaries],
          device=self.device,
      )
      max_quantile_boundaries = torch.zeros(
          [1, len(norm_params)], device=self.device
      )
      min_quantile_boundaries = torch.zeros(
          [1, len(norm_params)], device=self.device
      )
      for i, p in enumerate(norm_params):
          # pyre-fixme[16]: `Optional` has no attribute `__getitem__`.
          quantile_boundaries[0, i, :] = p.quantiles[-1]
          quantile_boundaries[
              0,
              i,
              # pyre-fixme[6]: Expected `Sized` for 1st param but got
              #  `Optional[List[float]]`.
              0 : len(p.quantiles),
          ] = torch.tensor(p.quantiles, device=self.device)
          # pyre-fixme[6]: Expected `Iterable[Variable[_T]]` for 1st param but got
          #  `Optional[List[float]]`.
          max_quantile_boundaries[0, i] = max(p.quantiles)
          # pyre-fixme[6]: Expected `Iterable[Variable[_T]]` for 1st param but got
          #  `Optional[List[float]]`.
          min_quantile_boundaries[0, i] = min(p.quantiles)
  
      quantile_boundaries = quantile_boundaries.to(self.device)
      max_quantile_boundaries = max_quantile_boundaries.to(self.device)
      min_quantile_boundaries = min_quantile_boundaries.to(self.device)
  
      self._create_parameter(
          begin_index, "quantile_boundaries", quantile_boundaries
      )
      self._create_parameter(
          begin_index,
          "max_quantile_boundaries",
          max_quantile_boundaries,
      )
      self._create_parameter(
          begin_index,
          "min_quantile_boundaries",
          min_quantile_boundaries,
      )
      self._create_parameter(
          begin_index,
          "quantile_boundary_mask",
          torch.ones([1, F, B], device=self.device),
      )
  
imports: import logging
  from typing import cast, Dict, List, Optional, Tuple
  import torch
  from reagent.core.parameters import NormalizationParameters
  from reagent.preprocessing.identify_types import DO_NOT_PREPROCESS, ENUM, FEATURE_TYPES
  from reagent.preprocessing.normalization import EPS, MAX_FEATURE_VALUE, MIN_FEATURE_VALUE
  from torch.nn import Module, Parameter
label_desc: Use image node_id 22 for calling the Preprocessor obj's underlying member method code with example usage: obj._create_parameters_QUANTILE(begin_index, norm_params) without return types