class_docstr: Calculate label drift between train dataset and test dataset, using statistical measures.
  
  Check calculates a drift score for the label in test dataset, by comparing its distribution to the train
  dataset. As the label may be complex, we calculate different properties of the label and check their distribution.
  
  A label property is any function that gets labels and returns list of values. each
  value represents a property on the label, such as number of objects in image or tilt of each bounding box in image.
  
  There are default properties per task:
  For classification:
  - distribution of classes
  
  For object detection:
  - distribution of classes
  - distribution of bounding box areas
  - distribution of number of bounding boxes per image
  
  For numerical distributions, we use the Kolmogorov-Smirnov statistic.
  See https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Smirnov_test
  We also support Earth Mover's Distance (EMD).
  See https://en.wikipedia.org/wiki/Wasserstein_metric
  
  For categorical distributions, we use the Cramer's V.
  See https://en.wikipedia.org/wiki/Cram%C3%A9r%27s_V
  We also support Population Stability Index (PSI).
  See https://www.lexjansen.com/wuss/2017/47_Final_Paper_PDF.pdf.
  
  **Note:** In case of highly imbalanced classes, it is recommended to use Cramer's V, together with setting
  the ``balance_classes`` parameter to ``True``.
  
  Parameters
  ----------
  label_properties : List[Dict[str, Any]], default: None
      List of properties. Replaces the default deepchecks properties.
      Each property is a dictionary with keys ``'name'`` (str), ``method`` (Callable) and ``'output_type'`` (str),
      representing attributes of said method. 'output_type' must be one of:
  
      - ``'numerical'`` - for continuous ordinal outputs.
      - ``'categorical'`` - for discrete, non-ordinal outputs. These can still be numbers,
        but these numbers do not have inherent value.
      - ``'class_id'`` - for properties that return the class_id. This is used because these
        properties are later matched with the ``VisionData.label_map``, if one was given.
  
      For more on image / label properties, see the guide about :ref:`vision__properties_guide`.
  margin_quantile_filter : float, default: 0.025
      float in range [0,0.5), representing which margins (high and low quantiles) of the distribution will be filtered
      out of the EMD calculation. This is done in order for extreme values not to affect the calculation
      disproportionally. This filter is applied to both distributions, in both margins.
  min_category_size_ratio : float, default 0.01
      minimum size ratio for categories. Categories with size ratio lower than this number are binned
      into an "Other" category. Ignored if balance_classes=True.
  max_num_categories_for_drift : int, default: None
      Only for discrete properties. Max number of allowed categories. If there are more,
      they are binned into an "Other" category.
  max_num_categories_for_display: int, default: 10
      Max number of categories to show in plot.
  show_categories_by : str, default: 'largest_difference'
      Specify which categories to show for categorical features' graphs, as the number of shown categories is limited
      by max_num_categories_for_display. Possible values:
      - 'train_largest': Show the largest train categories.
      - 'test_largest': Show the largest test categories.
      - 'largest_difference': Show the largest difference between categories.
  numerical_drift_method: str, default: "KS"
      decides which method to use on numerical variables. Possible values are:
      "EMD" for Earth Mover's Distance (EMD), "KS" for Kolmogorov-Smirnov (KS).
  categorical_drift_method : str, default: "cramers_v"
      decides which method to use on categorical variables. Possible values are:
      "cramers_v" for Cramer's V, "PSI" for Population Stability Index (PSI).
  balance_classes: bool, default: False
      If True, all categories will have an equal weight in the Cramer's V score. This is useful when the categorical
      variable is highly imbalanced, and we want to be alerted on changes in proportion to the category size,
      and not only to the entire dataset. Must have categorical_drift_method = "cramers_v".
      If True, the variable frequency plot will be created with a log scale in the y-axis.
  aggregation_method: str, default: None
      {property_aggregation_method_argument:2*indent}
  min_samples : int , default: 10
      Minimum number of samples required to calculate the drift score. If there are not enough samples for either
      train or test, the check will return None for that property. If there are not enough samples for all properties,
      the check will raise a ``NotEnoughSamplesError`` exception.
  {additional_check_init_params:2*indent}
class_docstr_tok: ["Calculate","label","drift","between","train","dataset","and","test","dataset",",","using","statistical","measures",".","Check","calculates","a","drift","score","for","the","label","in","test","dataset",",","by","comparing","its","distribution","to","the","train","dataset",".","As","the","label","may","be","complex",",","we","calculate","different","properties","of","the","label","and","check","their","distribution",".","A","label","property","is","any","function","that","gets","labels","and","returns","list","of","values",".","each","value","represents","a","property","on","the","label",",","such","as","number","of","objects","in","image","or","tilt","of","each","bounding","box","in","image",".","There","are","default","properties","per","task",":","For","classification",":","-","distribution","of","classes","For","object","detection",":","-","distribution","of","classes","-","distribution","of","bounding","box","areas","-","distribution","of","number","of","bounding","boxes","per","image","For","numerical","distributions",",","we","use","the","Kolmogorov-Smirnov","statistic",".","See","https",":","\/\/en.wikipedia.org\/wiki\/Kolmogorov","%","E2","%","80","%","93Smirnov_test","We","also","support","Earth","Mover","'s","Distance","(","EMD",")",".","See","https",":","\/\/en.wikipedia.org\/wiki\/Wasserstein_metric","For","categorical","distributions",",","we","use","the","Cramer","'s","V.","See","https",":","\/\/en.wikipedia.org\/wiki\/Cram","%","C3","%","A9r","%","27s_V","We","also","support","Population","Stability","Index","(","PSI",")",".","See","https",":","\/\/www.lexjansen.com\/wuss\/2017\/47_Final_Paper_PDF.pdf",".","*","*","Note",":","*","*","In","case","of","highly","imbalanced","classes",",","it","is","recommended","to","use","Cramer","'s","V",",","together","with","setting","the","``","balance_classes","``","parameter","to","``","True","``",".","Parameters","--","--","--","--","--","label_properties",":","List","[","Dict","[","str",",","Any","]","]",",","default",":","None","List","of","properties",".","Replaces","the","default","deepchecks","properties",".","Each","property","is","a","dictionary","with","keys","``","'name","'","``","(","str",")",",","``","method","``","(","Callable",")","and","``","'output_type","'","``","(","str",")",",","representing","attributes","of","said","method",".","'output_type","'","must","be","one","of",":","-","``","'numerical","'","``","-","for","continuous","ordinal","outputs",".","-","``","'categorical","'","``","-","for","discrete",",","non-ordinal","outputs",".","These","can","still","be","numbers",",","but","these","numbers","do","not","have","inherent","value",".","-","``","'class_id","'","``","-","for","properties","that","return","the","class_id",".","This","is","used","because","these","properties","are","later","matched","with","the","``","VisionData.label_map","``",",","if","one","was","given",".","For","more","on","image","\/","label","properties",",","see","the","guide","about",":","ref",":","`","vision__properties_guide","`",".","margin_quantile_filter",":","float",",","default",":","0.025","float","in","range","[","0,0.5",")",",","representing","which","margins","(","high","and","low","quantiles",")","of","the","distribution","will","be","filtered","out","of","the","EMD","calculation",".","This","is","done","in","order","for","extreme","values","not","to","affect","the","calculation","disproportionally",".","This","filter","is","applied","to","both","distributions",",","in","both","margins",".","min_category_size_ratio",":","float",",","default","0.01","minimum","size","ratio","for","categories",".","Categories","with","size","ratio","lower","than","this","number","are","binned","into","an","``","Other","''","category",".","Ignored","if","balance_classes=True",".","max_num_categories_for_drift",":","int",",","default",":","None","Only","for","discrete","properties",".","Max","number","of","allowed","categories",".","If","there","are","more",",","they","are","binned","into","an","``","Other","''","category",".","max_num_categories_for_display",":","int",",","default",":","10","Max","number","of","categories","to","show","in","plot",".","show_categories_by",":","str",",","default",":","'largest_difference'","Specify","which","categories","to","show","for","categorical","features","'","graphs",",","as","the","number","of","shown","categories","is","limited","by","max_num_categories_for_display",".","Possible","values",":","-","'train_largest","'",":","Show","the","largest","train","categories",".","-","'test_largest","'",":","Show","the","largest","test","categories",".","-","'largest_difference","'",":","Show","the","largest","difference","between","categories",".","numerical_drift_method",":","str",",","default",":","``","KS","''","decides","which","method","to","use","on","numerical","variables",".","Possible","values","are",":","``","EMD","''","for","Earth","Mover","'s","Distance","(","EMD",")",",","``","KS","''","for","Kolmogorov-Smirnov","(","KS",")",".","categorical_drift_method",":","str",",","default",":","``","cramers_v","''","decides","which","method","to","use","on","categorical","variables",".","Possible","values","are",":","``","cramers_v","''","for","Cramer","'s","V",",","``","PSI","''","for","Population","Stability","Index","(","PSI",")",".","balance_classes",":","bool",",","default",":","False","If","True",",","all","categories","will","have","an","equal","weight","in","the","Cramer","'s","V","score",".","This","is","useful","when","the","categorical","variable","is","highly","imbalanced",",","and","we","want","to","be","alerted","on","changes","in","proportion","to","the","category","size",",","and","not","only","to","the","entire","dataset",".","Must","have","categorical_drift_method","=","``","cramers_v","''",".","If","True",",","the","variable","frequency","plot","will","be","created","with","a","log","scale","in","the","y-axis",".","aggregation_method",":","str",",","default",":","None","{","property_aggregation_method_argument:2","*","indent","}","min_samples",":","int",",","default",":","10","Minimum","number","of","samples","required","to","calculate","the","drift","score",".","If","there","are","not","enough","samples","for","either","train","or","test",",","the","check","will","return","None","for","that","property",".","If","there","are","not","enough","samples","for","all","properties",",","the","check","will","raise","a","``","NotEnoughSamplesError","``","exception",".","{","additional_check_init_params:2","*","indent","}"]
docstr: Return label drift score per label property.
docstr_tok: ["Return","label","drift","score","per","label","property","."]
code: def reduce_output(
      self, check_result: CheckResult
  ) -> Dict[str, float]:
      """Return label drift score per label property."""
      value_per_property = {
          name: label_property["Drift score"]
          for name, label_property in check_result.value.items()
      }
      return self.property_reduce(
          self.aggregation_method,
          pd.Series(value_per_property),
          "Drift Score",
      )
  
imports: from collections import OrderedDict, defaultdict
  from typing import Any, Dict, List, Optional
  import pandas
  from deepchecks.core import CheckResult, DatasetKind
  from deepchecks.core.checks import CheckConfig
  from deepchecks.core.errors import DeepchecksNotSupportedError
  from deepchecks.core.reduce_classes import ReduceLabelMixin, ReducePropertyMixin
  from deepchecks.utils.distribution.drift import calc_drift_and_plot, drift_condition, get_drift_plot_sidenote
  from deepchecks.vision._shared_docs import docstrings
  from deepchecks.vision.base_checks import TrainTestCheck
  from deepchecks.vision.context import Context
  from deepchecks.vision.utils.label_prediction_properties import DEFAULT_CLASSIFICATION_LABEL_PROPERTIES, DEFAULT_OBJECT_DETECTION_LABEL_PROPERTIES, DEFAULT_SEMANTIC_SEGMENTATION_LABEL_PROPERTIES, get_column_type, properties_flatten
  from deepchecks.vision.utils.vision_properties import PropertiesInputType
  from deepchecks.vision.vision_data import TaskType
  from deepchecks.vision.vision_data.batch_wrapper import BatchWrapper
label_desc: Use image node_id 6 for calling the LabelDrift obj's underlying member method code with example usage: obj.reduce_output(check_result) and returns: self