export interface NormalizationBinParametersMixinProperties extends Partial<Pick<NormalizationBinParametersMixin, "normalizationField" | "normalizationMaxValue" | "normalizationMinValue" | "normalizationTotal" | "normalizationType">> {}

/**
 * Normalization type used to normalize data during binning. Some analytical methods require that data be normally distributed.
 * When the data is skewed (the distribution is lopsided) you can transform the data to make it normal.
 *
 * The following normalization types are supported:
 *
 * | Value            | Description                                                                 |
 * |------------------|-----------------------------------------------------------------------------|
 * | natural-log      | Natural logarithmic transformation can be used when the data has a positively skewed distribution and there are a few large values. If these large values are located in the dataset, the log transformation will help make the variances more constant and normalize the data. |
 * | log              | The logarithmic transformation (base 10) is similar to the natural logarithmic transformation. It is used to reduce skewness, particularly in datasets with large values. |
 * | square-root      | Square root transformation is similar to a logarithmic transformation in that it reduces right skewness of a dataset. Unlike logarithmic transformations, square root transformations can be applied to zero. |
 * | percent-of-total | Percent of total takes each data value, divides it by the [normalizationTotal](https://developers.arcgis.com/javascript/latest/references/core/rest/support/NormalizationBinParametersMixin/#normalizationTotal) of all values, and then multiplies by 100 to turn it into a percentage. If you don’t provide a `normalizationTotal`, it will be calculated automatically. |
 * | field            | Divides the data value by the value from the specified field. You must provide the [normalizationField](https://developers.arcgis.com/javascript/latest/references/core/rest/support/NormalizationBinParametersMixin/#normalizationField), and values of 0 are filtered out. |
 * 
 *
 * @see [normalizationType](https://developers.arcgis.com/javascript/latest/references/core/rest/support/NormalizationBinParametersMixin/#normalizationType)
 */
export type NormalizationType = "natural-log" | "square-root" | "percent-of-total" | "log" | "field";

/**
 * Mixin for binning parameters.
 *
 * @since 4.32
 */
export abstract class NormalizationBinParametersMixin {
  constructor(...args: any[]);
  /**
   * Name of the numeric field used to normalize values during binning. The normalization field must be specified when the
   * [normalizationType](https://developers.arcgis.com/javascript/latest/references/core/rest/support/NormalizationBinParametersMixin/#normalizationType) is set to `field`. Only non-zero values from the `normalizationField` are used during binning.
   */
  accessor normalizationField: string | null | undefined;
  /**
   * The maximum value used to normalize the data during binning. It ensures that all data points are scaled relative to this maximum value.
   *
   * > [!WARNING]
   * >
   * > **Known Limitations**
   * >
   * >  The `normalizationMaxValue` is only supported with server-side [FeatureLayers](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/).
   */
  accessor normalizationMaxValue: number | null | undefined;
  /**
   * The minimum value used to normalize the data during binning. It ensures that all data points are scaled relative to this minimum value.
   *
   * > [!WARNING]
   * >
   * > **Known Limitations**
   * >
   * >  The `normalizationMinValue` is only supported with server-side [FeatureLayers](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/).
   */
  accessor normalizationMinValue: number | null | undefined;
  /**
   * The total value used when the [normalizationType](https://developers.arcgis.com/javascript/latest/references/core/rest/support/NormalizationBinParametersMixin/#normalizationType) is `percent-of-total`. Percent of total takes each data value, divides it by the [normalizationTotal](https://developers.arcgis.com/javascript/latest/references/core/rest/support/NormalizationBinParametersMixin/#normalizationTotal) of all values,
   * and then multiplies by 100 to turn it into a percentage.
   */
  accessor normalizationTotal: number | null | undefined;
  /**
   * Normalization type used to normalize data during binning. Some analytical methods require that data be normally distributed.
   * When the data is skewed (the distribution is lopsided) you can transform the data to make it normal.
   *
   * The following normalization types are supported:
   *
   * | Value            | Description                                                                 |
   * |------------------|-----------------------------------------------------------------------------|
   * | natural-log      | Natural logarithmic transformation can be used when the data has a positively skewed distribution and there are a few large values. If these large values are located in the dataset, the log transformation will help make the variances more constant and normalize the data. |
   * | log              | The logarithmic transformation (base 10) is similar to the natural logarithmic transformation. It is used to reduce skewness, particularly in datasets with large values. |
   * | square-root      | Square root transformation is similar to a logarithmic transformation in that it reduces right skewness of a dataset. Unlike logarithmic transformations, square root transformations can be applied to zero. |
   * | percent-of-total | Percent of total takes each data value, divides it by the [normalizationTotal](https://developers.arcgis.com/javascript/latest/references/core/rest/support/NormalizationBinParametersMixin/#normalizationTotal) of all values, and then multiplies by 100 to turn it into a percentage. If you don’t provide a `normalizationTotal`, it will be calculated automatically. |
   * | field            | Divides the data value by the value from the specified field. You must provide the [normalizationField](https://developers.arcgis.com/javascript/latest/references/core/rest/support/NormalizationBinParametersMixin/#normalizationField), and values of 0 are filtered out. |
   * 
   */
  accessor normalizationType: NormalizationType | null | undefined;
}