{
  "$schema": "http://json-schema.org/draft-07/schema",
  "$id": "https://metadata.datadrivendiscovery.org/schemas/v0/definitions.json",
  "definitions": {
    "id": {
      "type": "string",
      "description": "A static id. It should never change for a given value, even if the value itself is changing. For example, all versions of the same primitive should have the same id. If possible, it should be a UUID generated in any way, but if there is an existing id available, it can be reused."
    },
    "hash_id": {
      "type": "string",
      "description": "An UUIDv5 id computed by using UUID namespace \"8614b2cc-89ef-498e-9254-833233b3959b\" and JSON-serialized contents of the document without the \"id\" field for UUID name."
    },
    "version": {
      "type": "string",
      "description": "A string representing a version. Versions can be PEP 440 version strings or a SHA256 hexadecimal digest of value's content, if applicable. In the former case they are compared according to PEP 440 rules."
    },
    "digest": {
      "type": "string",
      "description": "A SHA256 hexadecimal digest of value's content. For datasets is digest over all files. For primitives it is a digest of its \"id\" and \"installation\" metadata. For other JSON-compatible structures, it is generally a digest of the canonical JSON-serialization of the structure, without the \"digest\" field itself.",
      "pattern": "^[a-fA-F0-9]{64}$"
    },
    "schema": {
      "type": "string",
      "description": "A URI representing a metadata.datadrivendiscovery.org schema and version to which metadata conforms.",
      "format": "uri"
    },
    "description": {
      "type": "string",
      "description": "A natural language description in an unspecified language."
    },
    "name": {
      "type": "string",
      "description": "A human readable name in an unspecified language or format."
    },
    "other_names": {
      "type": "array",
      "description": "Any other names associated with the value.",
      "items": {
        "$ref": "#/definitions/name"
      },
      "minItems": 1
    },
    "python_path": {
      "type": "string",
      "description": "A fully-qualified Python path to primitive's class under the \"d3m.primitives\" namespace.",
      "pattern": "^d3m\\.primitives\\."
    },
    "original_python_path": {
      "type": "string",
      "description": "A fully-qualified Python path to primitive's class inside installable package and not one under the \"d3m.primitives\" namespace."
    },
    "dimension": {
      "type": "object",
      "description": "Metadata for the dimension (e.g., rows and columns).",
      "properties": {
        "name": {
          "$ref": "#/definitions/name"
        },
        "description": {
          "$ref": "#/definitions/description"
        },
        "semantic_types": {
          "$ref": "#/definitions/semantic_types"
        },
        "length": {
          "type": "integer",
          "description": "Number of elements in a given dimension (number of samples, number of columns, etc.)."
        },
        "sampling_rate": {
          "allOf": [{"$ref": "#/definitions/sampling_rate"}],
          "description": "If values in the dimension are sampled, this value represents the sampling rate in seconds."
        }
      },
      "required": [
        "length"
      ],
      "additionalProperties": true
    },
    "data_metafeatures": {
      "type": "object",
      "description": "Some data metafeatures can apply both at the container (dataset) or internal data levels (resource, table, column). In any case they apply and hold for the whole underlying structure. For example, if \"number_distinct_values\" is set at a dataset level, it means that all columns in the dataset have this number of distinct values. If it is set only for a target column, then only that column has this number of distinct values, classes.",
      "properties": {
        "number_of_attributes": {
          "type": "integer",
          "description": "The number of attributes in the data."
        },
        "number_of_instances": {
          "type": "integer",
          "description": "The number of instances in the data."
        },
        "dimensionality": {
          "type": "number",
          "description": "Number of attributes divided by the number of instances."
        },
        "number_of_numeric_attributes": {
          "type": "integer",
          "description": "Number of numeric attributes, which are not also categorical."
        },
        "ratio_of_numeric_attributes": {
          "type": "number",
          "description": "Ratio of number of numeric attributes to total number of attributes."
        },
        "number_of_string_attributes": {
          "type": "integer",
          "description": "Number of string attributes, which are not also categorical."
        },
        "ratio_of_string_attributes": {
          "type": "number",
          "description": "Ratio of number of string attributes to total number of attributes."
        },
        "number_of_categorical_attributes": {
          "type": "integer",
          "description": "Number of categorical attributes."
        },
        "ratio_of_categorical_attributes": {
          "type": "number",
          "description": "Ratio of number of categorical attributes to total number of attributes."
        },
        "number_of_other_attributes": {
          "type": "integer",
          "description": "Number of other (not numeric, not string, and not categorical) attributes."
        },
        "ratio_of_other_attributes": {
          "type": "number",
          "description": "Ratio of number of other attributes to total number of attributes."
        },
        "number_of_discrete_attributes": {
          "type": "integer",
          "description": "Number of discrete attributes. A discrete attribute is a numeric attribute with only integer values."
        },
        "ratio_of_discrete_attributes": {
          "type": "number",
          "description": "Ratio of number of discrete attributes to total number of attributes. A discrete attribute is a numeric attribute with only integer values."
        },
        "number_of_binary_attributes": {
          "type": "integer",
          "description": "Number of binary attributes. A binary attribute is a discrete attribute with exactly two values."
        },
        "ratio_of_binary_attributes": {
          "type": "number",
          "description": "Ratio of number of binary attributes to total number of attributes. A binary attribute is a discrete attribute with exactly two values."
        },
        "attribute_counts_by_structural_type": {
          "type": "object",
          "description": "A map between structural types as string and a count of attributes with that structural type.",
          "additionalProperties": {
            "type": "integer"
          }
        },
        "attribute_ratios_by_structural_type": {
          "type": "object",
          "description": "A map between structural types as string and a ratio of attributes with that structural type to all attributes.",
          "additionalProperties": {
            "type": "number"
          }
        },
        "attribute_counts_by_semantic_type": {
          "type": "object",
          "description": "A map between semantic types and a count of attributes with that semantic type. Attributes can have multiple semantic types.",
          "additionalProperties": {
            "type": "integer"
          }
        },
        "attribute_ratios_by_semantic_type": {
          "type": "object",
          "description": "A map between semantic types as string and a ratio of attributes with that semantic type to all attributes. Attributes can have multiple semantic types.",
          "additionalProperties": {
            "type": "number"
          }
        },
        "number_distinct_values": {
          "type": "integer",
          "description": "The number of distinct non-missing values for categorical or discrete values."
        },
        "entropy_of_values": {
          "type": "number",
          "description": "The entropy of non-missing values. If values are not categorical or discrete, they are binned into \"number of all values\" ^ 1/3 bins."
        },
        "value_counts_aggregate": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics of occurrence counts of non-missing values. If values are not categorical or discrete, they are binned into \"number of all values\" ^ 1/3 bins."
        },
        "value_probabilities_aggregate": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics of probabilities of non-missing values. Probability of a value is defined as \"an occurrence count of a non-missing value\" / \"number of all non-missing values\". If values are not categorical or discrete, they are binned into \"number of all values\" ^ 1/3 bins."
        },
        "values_aggregate": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics of numeric non-missing values."
        },
        "number_distinct_values_of_categorical_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the number of distinct non-missing values in each categorical attributes."
        },
        "number_distinct_values_of_numeric_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the number of distinct non-missing values in each numeric attributes."
        },
        "number_distinct_values_of_discrete_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the number of distinct non-missing values in each discrete attributes."
        },
        "mean_of_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the mean of numeric attributes."
        },
        "standard_deviation_of_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the standard deviation of numeric attributes."
        },
        "kurtosis_of_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the kurtosis of numeric attributes."
        },
        "skew_of_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the skew of numeric attributes."
        },
        "entropy_of_categorical_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the entropy of categorical attributes."
        },
        "entropy_of_numeric_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the entropy of numeric attributes."
        },
        "entropy_of_discrete_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the entropy of discrete attributes."
        },
        "entropy_of_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the entropy of all (categorical and numeric) attributes."
        },
        "joint_entropy_of_categorical_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the joint entropy of every categorical attribute with a given target."
        },
        "joint_entropy_of_numeric_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the joint entropy of every numeric attribute with a given target."
        },
        "joint_entropy_of_discrete_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the joint entropy of every discrete attribute with a given target."
        },
        "joint_entropy_of_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the joint entropy of every (categorical and numeric) attribute with a given target."
        },
        "mutual_information_of_categorical_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the mutual information of every categorical attribute with a given target."
        },
        "mutual_information_of_numeric_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the mutual information of every numeric attribute with a given target."
        },
        "mutual_information_of_discrete_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the mutual information of every discrete attribute with a given target."
        },
        "mutual_information_of_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the mutual information of every (categorical and numeric) attribute with a given target."
        },
        "pearson_correlation_of_numeric_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the pearson correlation between all pairs of numeric attributes. If set on a target column, it represents aggregate statistics about the pearson correlation of every numeric attribute with that target."
        },
        "spearman_correlation_of_numeric_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the spearman correlation between all pairs of numeric attributes. If set on a target column, it represents aggregate statistics about the spearman correlation of every numeric attribute with that target."
        },
        "canonical_correlation_of_numeric_attributes": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the canonical correlation between all pairs of numeric attributes. If set on a target column, it represents aggregate statistics about the canonical correlation of every numeric attribute with that target."
        },
        "equivalent_number_of_categorical_attributes": {
          "type": "number",
          "description": "Number of categorical attributes needed to optimally describe the target (under the assumption of independence among attributes). Equals target's \"entropy_of_values\" divided by \"mutual_information_of_categorical_attributes.mean\"."
        },
        "equivalent_number_of_numeric_attributes": {
          "type": "number",
          "description": "Number of numeric attributes needed to optimally describe the target (under the assumption of independence among attributes). Equals target's \"entropy_of_values\" divided by \"mutual_information_of_numeric_attributes.mean\"."
        },
        "equivalent_number_of_discrete_attributes": {
          "type": "number",
          "description": "Number of discrete attributes needed to optimally describe the target (under the assumption of independence among attributes). Equals target's \"entropy_of_values\" divided by \"mutual_information_of_discrete_attributes.mean\"."
        },
        "equivalent_number_of_attributes": {
          "type": "number",
          "description": "Number of all (categorical and numeric) attributes needed to optimally describe the target (under the assumption of independence among attributes). Equals target's \"entropy_of_values\" divided by \"mutual_information_of_attributes.mean\"."
        },
        "categorical_noise_to_signal_ratio": {
          "type": "number",
          "description": "An estimate of the amount of irrelevant information in the categorical attributes regarding the target. Equals (\"entropy_of_categorical_attributes.mean\" - \"mutual_information_of_categorical_attributes.mean\") divided by \"mutual_information_of_categorical_attributes.mean\"."
        },
        "numeric_noise_to_signal_ratio": {
          "type": "number",
          "description": "An estimate of the amount of irrelevant information in the numeric attributes regarding the target. Equals (\"entropy_of_numeric_attributes.mean\" - \"mutual_information_of_numeric_attributes.mean\") divided by \"mutual_information_of_numeric_attributes.mean\"."
        },
        "discrete_noise_to_signal_ratio": {
          "type": "number",
          "description": "An estimate of the amount of irrelevant information in the discrete attributes regarding the target. Equals (\"entropy_of_discrete_attributes.mean\" - \"mutual_information_of_discrete_attributes.mean\") divided by \"mutual_information_of_discrete_attributes.mean\"."
        },
        "noise_to_signal_ratio": {
          "type": "number",
          "description": "An estimate of the amount of irrelevant information in all (categorical and numeric) attributes regarding the target. Equals (\"entropy_of_attributes.mean\" - \"mutual_information_of_attributes.mean\") divided by \"mutual_information_of_attributes.mean\"."
        },
        "number_of_missing_values": {
          "type": "integer",
          "description": "Number of missing values."
        },
        "ratio_of_missing_values": {
          "type": "number",
          "description": "Ratio of number of missing values to number of all values."
        },
        "number_of_present_values": {
          "type": "integer",
          "description": "Number of present values."
        },
        "ratio_of_present_values": {
          "type": "number",
          "description": "Ratio of number of present values to number of all values."
        },
        "number_of_numeric_values": {
          "type": "integer",
          "description": "Number of values that are strictly integers or floats. The value NaN is not counted."
        },
        "ratio_of_numeric_values": {
          "type": "number",
          "description": "Ratio of number of values that are strictly integers or floats to number of all values. The value NaN is not counted."
        },
        "number_of_positive_numeric_values": {
          "type": "integer",
          "description": "Number of positive values."
        },
        "ratio_of_positive_numeric_values": {
          "type": "number",
          "description": "Ratio of number of positive values to number of all values."
        },
        "number_of_negative_numeric_values": {
          "type": "integer",
          "description": "Number of negative values."
        },
        "ratio_of_negative_numeric_values": {
          "type": "number",
          "description": "Ratio of number of negative values to number of all values."
        },
        "number_of_numeric_values_equal_0": {
          "type": "integer",
          "description": "Number of 0 or 0.0 values."
        },
        "ratio_of_numeric_values_equal_0": {
          "type": "number",
          "description": "Ratio of number of 0 or 0.0 values to number of all values."
        },
        "number_of_numeric_values_equal_1": {
          "type": "integer",
          "description": "Number of 1 or 1.0 values."
        },
        "ratio_of_numeric_values_equal_1": {
          "type": "number",
          "description": "Ratio of number of 1 or 1.0 values to number of all values."
        },
        "number_of_numeric_values_equal_-1": {
          "type": "integer",
          "description": "Number of -1 and -1.0."
        },
        "ratio_of_numeric_values_equal_-1": {
          "type": "number",
          "description": "Ratio of number of -1 and -1.0 to number of all values."
        },
        "number_of_outlier_numeric_values": {
          "allOf": [{"$ref": "#/definitions/outliers"}],
          "description": "Outliers of numeric values."
        },
        "number_of_instances_with_missing_values": {
          "type": "integer",
          "description": "Number of instances with missing values in one or more attributes."
        },
        "ratio_of_instances_with_missing_values": {
          "type": "number",
          "description": "Ratio of number of instances with missing values in one or more attributes to number of all instances."
        },
        "number_of_instances_with_present_values": {
          "type": "integer",
          "description": "Number of instances with present values in one or more attributes."
        },
        "ratio_of_instances_with_present_values": {
          "type": "number",
          "description": "Ratio of number of instances with present values in one or more attributes to number of all instances."
        },
        "natural_language_of_attribute": {
          "type": "array",
          "description": "Natural language detection that contains pairs of language code and count.",
          "items": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string",
                "description": "ISO 639-1 language code, e.g., \"en\", \"es\", \"zh\"."
              },
              "count": {
                "type": "integer",
                "description": "Number of values in a attribute with the given language code."
              }
            },
            "required": [
              "code",
              "count"
            ],
            "additionalProperties": true
          },
          "minItems": 1
        },
        "length_of_string_values": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the length of string values."
        },
        "token_count_in_string_values": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about the number of tokens per string value. Tokens are split by the space character."
        },
        "numeric_char_density": {
          "allOf": [{"$ref": "#/definitions/aggregate"}],
          "description": "Aggregate statistics about numeric character density of string values. Density is defined to be the number of character that satisfies \"isdigit\" divided by the number characters in the string."
        },
        "number_of_values_containing_numeric_char": {
          "type": "integer",
          "description": "Number of string values that contain at least one numeric character."
        },
        "ratio_of_values_containing_numeric_char": {
          "type": "number",
          "description": "Ratio of number of string values that contain at least one numeric character to number of all string values."
        },
        "number_of_tokens": {
          "type": "integer",
          "description": "Number of tokens in all string values. Tokens are split by the space character."
        },
        "number_of_tokens_containing_numeric_char": {
          "type": "integer",
          "description": "Number of tokens in all string values that contain at least one numeric character."
        },
        "ratio_of_tokens_containing_numeric_char": {
          "type": "number",
          "description": "Ratio of number of tokens in all string values that contain at least one numeric character to number of tokens in all string values."
        },
        "number_of_tokens_split_by_punctuation": {
          "type": "integer",
          "description": "Number of tokens in all string values. Tokens are split by \"string.punctions\"."
        },
        "number_of_tokens_split_by_punctuation_containing_numeric_char": {
          "type": "integer",
          "description": "Number of tokens in all string values that contain at least one numeric character."
        },
        "ratio_of_tokens_split_by_punctuation_containing_numeric_char": {
          "type": "number",
          "description": "Ratio of number of tokens in all string values that contain at least one numeric character to number of tokens in all string values split by punctuation."
        },
        "number_of_values_with_leading_spaces": {
          "type": "integer",
          "description": "Number of string values with leading whitespaces."
        },
        "ratio_of_values_with_leading_spaces": {
          "type": "number",
          "description": "Ratio of number of string values with leading whitespaces to number of all string values."
        },
        "number_of_values_with_trailing_spaces": {
          "type": "integer",
          "description": "Number of string values with trailing whitespaces."
        },
        "ratio_of_values_with_trailing_spaces": {
          "type": "number",
          "description": "Ratio of number of string values with trailing whitespaces to number of all string values."
        },
        "number_of_distinct_values": {
          "type": "integer",
          "description": "Number of distinct values. Missing values are ignored."
        },
        "ratio_of_distinct_values": {
          "type": "number",
          "description": "Ratio of number of distinct values to number of all values. Missing values are ignored."
        },
        "number_of_distinct_tokens": {
          "type": "integer",
          "description": "Number of distinct tokens in all string values. Tokens are split by the space character. Missing values are ignored."
        },
        "ratio_of_distinct_tokens": {
          "type": "number",
          "description": "Ratio of number of distinct tokens in all string values to number of tokens in all string values. Tokens are split by the space character. Missing values are ignored."
        },
        "number_of_distinct_tokens_split_by_punctuation": {
          "type": "integer",
          "description": "Number of distinct tokens in all string values. Tokens are split by \"string.punctions\". Missing values are ignored."
        },
        "ratio_of_distinct_tokens_split_by_punctuation": {
          "type": "number",
          "description": "Ratio of number of distinct tokens in all string values to number of tokens in all string values. Tokens are split by \"string.punctions\". Missing values are ignored."
        },
        "most_common_tokens": {
          "type": "array",
          "description": "Most common tokens and their counts and ratio. Tokens are split by the space character.",
          "items": {
            "type": "object",
            "properties": {
              "token": {
                "type": "string",
                "description": "Token string value."
              },
              "count": {
                "type": "integer",
                "description": "Number of occurrences of this token in all string values."
              },
              "ratio": {
                "type": "number",
                "description": "Ratio of number of occurrences of this token in all string values to number of tokens in all string tokens."
              }
            },
            "required": [
              "token",
              "count"
            ],
            "additionalProperties": true
          },
          "minItems": 1
        },
        "most_common_alphanumeric_tokens": {
          "type": "array",
          "description": "Most common alphanumeric tokens and their counts and ratio. A token is alphanumeric if \"isalnum\" returns \"True\". Tokens are split by the space character.",
          "items": {
            "type": "object",
            "properties": {
              "token": {
                "type": "string",
                "description": "Token string value."
              },
              "count": {
                "type": "integer",
                "description": "Number of occurrences of this token in all string values."
              },
              "ratio": {
                "type": "number",
                "description": "Ratio of number of occurrences of this token in all string values to number of tokens in all string tokens."
              }
            },
            "required": [
              "token",
              "count"
            ],
            "additionalProperties": true
          },
          "minItems": 1
        },
        "most_common_numeric_tokens": {
          "type": "array",
          "description": "Most common numeric tokens and their counts and ratio. Tokens are split by the space character.",
          "items": {
            "type": "object",
            "properties": {
              "token": {
                "type": "string",
                "description": "Token string value."
              },
              "count": {
                "type": "integer",
                "description": "Number of occurrences of this token in all string values."
              },
              "ratio": {
                "type": "number",
                "description": "Ratio of number of occurrences of this token in all string values to number of tokens in all string tokens."
              }
            },
            "required": [
              "token",
              "count"
            ],
            "additionalProperties": true
          },
          "minItems": 1
        },
        "most_common_tokens_split_by_punctuation": {
          "type": "array",
          "description": "Most common tokens and their counts and ratio. Tokens are split by \"string.punctions\".",
          "items": {
            "type": "object",
            "properties": {
              "token": {
                "type": "string",
                "description": "Token string value."
              },
              "count": {
                "type": "integer",
                "description": "Number of occurrences of this token in all string values."
              },
              "ratio": {
                "type": "number",
                "description": "Ratio of number of occurrences of this token in all string values to number of tokens in all string tokens."
              }
            },
            "required": [
              "token",
              "count"
            ],
            "additionalProperties": true
          },
          "minItems": 1
        },
        "most_common_punctuations": {
          "type": "array",
          "description": "The most common punctuations and their counts. Punctuations are defined by \"string.punctions\".",
          "items": {
            "type": "object",
            "properties": {
              "punctuation": {
                "type": "string",
                "description": "Punctuation string value."
              },
              "count": {
                "type": "integer",
                "description": "Number of occurrence of this punctuation in all string values."
              },
              "ratio": {
                "type": "number",
                "description": "Ratio of number of occurrences of this punctuation in all string values to number of characters in all string values."
              },
              "punctuation_density_aggregate": {
                "allOf": [{"$ref": "#/definitions/aggregate"}],
                "description": "Aggregate statistics about punctuation density of string values for this punctuation. Punctuation density is the ratio of number of occurrences of this punctuation in the value to the number of characters in the value."
              },
              "punctuation_density_outliers": {
                "allOf": [{"$ref": "#/definitions/outliers"}],
                "description": "Outliers of punctuation density of string values for this punctuation. Punctuation density is the ratio of number of occurrences of this punctuation in the value to the number of characters in the value."
              }
            },
            "required": [
              "punctuation",
              "count"
            ],
            "additionalProperties": true
          },
          "minItems": 1
        },
        "most_common_raw_values": {
          "type": "array",
          "description": "Most common values and their counts and ratio.",
          "items": {
            "type": "object",
            "properties": {
              "value": {
                "type": "string",
                "description": "Value in its raw string format."
              },
              "count": {
                "type": "integer",
                "description": "Number of occurrences of this value in all values."
              },
              "ratio": {
                "type": "number",
                "description": "Ratio of number of occurrences of this value in all values to number of all values."
              }
            },
            "required": [
              "value",
              "count"
            ],
            "additionalProperties": true
          },
          "minItems": 1
        },
        "default_accuracy": {
          "type": "number",
          "description": "The predictive accuracy obtained by always predicting the majority class."
        },
        "pca": {
          "type": "object",
          "description": "The results of principal component analysis on the data using default hyper-parameters.",
          "properties": {
            "explained_variance_ratio_component_1": {
              "type": "number",
              "description": "The explained variance ratio of component 1."
            },
            "explained_variance_ratio_component_2": {
              "type": "number",
              "description": "The explained variance ratio of component 2."
            },
            "explained_variance_ratio_component_3": {
              "type": "number",
              "description": "The explained variance ratio of component 3."
            },
            "eigenvalue_component_1": {
              "type": "number",
              "description": "The eigenvalue for component 1."
            },
            "eigenvalue_component_2": {
              "type": "number",
              "description": "The eigenvalue for component 2."
            },
            "eigenvalue_component_3": {
              "type": "number",
              "description": "The eigenvalue for component 3."
            },
            "determinant_of_covariance": {
              "type": "number",
              "description": "The determinant of the covariance matrix."
            },
            "primitive": {
              "allOf": [{"$ref": "#/definitions/primitive_reference"}],
              "description": "A primitive used to compute these metafeatures."
            },
            "random_seed": {
              "type": "integer",
              "description": "Random seed used, if a primitive accepts a random seed."
            }
          },
          "required": [
            "primitive"
          ],
          "additionalProperties": true
        },
        "oner": {
          "type": "object",
          "description": "The results of training of Weka's OneR algorithm (or equivalent implementation) on the data using default hyper-parameters.",
          "properties": {
            "accuracy": {
              "type": "number",
              "description": "The predictive accuracy. Determines how much information is contained in the most predictive attribute."
            },
            "primitive": {
              "allOf": [{"$ref": "#/definitions/primitive_reference"}],
              "description": "A primitive used to compute these metafeatures."
            },
            "random_seed": {
              "type": "integer",
              "description": "Random seed used, if a primitive accepts a random seed."
            }
          },
          "required": [
            "primitive"
          ],
          "additionalProperties": true
        },
        "random_tree": {
          "type": "object",
          "description": "The results of training decision trees of various depths with random splits and other hyper-parameters set to defaults.",
          "properties": {
            "depth_1_error_rate": {
              "type": "number",
              "description": "The error rate resulting from training a depth 1 decision tree with a random split."
            },
            "depth_1_kappa": {
              "type": "number",
              "description": "The kappa resulting from training a depth 1 decision tree with a random split."
            },
            "depth_1_auc": {
              "type": "number",
              "description": "The auc resulting from training a depth 1 decision tree with a random split."
            },
            "depth_2_error_rate": {
              "type": "number",
              "description": "The error rate resulting from training a depth 2 decision tree with a random split."
            },
            "depth_2_kappa": {
              "type": "number",
              "description": "The kappa resulting from training a depth 2 decision tree with a random split."
            },
            "depth_2_auc": {
              "type": "number",
              "description": "The auc resulting from training a depth 1 decision tree with a random split."
            },
            "depth_3_error_rate": {
              "type": "number",
              "description": "The error rate resulting from training a depth 3 decision tree with a random split."
            },
            "depth_3_kappa": {
              "type": "number",
              "description": "The kappa resulting from training a depth 3 decision tree with a random split."
            },
            "depth_3_auc": {
              "type": "number",
              "description": "The auc resulting from training a depth 1 decision tree with a random split."
            },
            "primitive": {
              "allOf": [{"$ref": "#/definitions/primitive_reference"}],
              "description": "A primitive used to compute these metafeatures."
            },
            "random_seed": {
              "type": "integer",
              "description": "Random seed used, if a primitive accepts a random seed."
            }
          },
          "required": [
            "primitive"
          ],
          "additionalProperties": true
        },
        "decision_stump": {
          "type": "object",
          "description": "The results of training a depth 1 decision tree on the data with the best split based on entropy and other hyper-parameters set to defaults.",
          "properties": {
            "error_rate": {
              "type": "number",
              "description": "The error rate resulting from training a depth 1 decision tree with the best split based on entropy."
            },
            "kappa": {
              "type": "number",
              "description": "The kappa resulting from training a depth 1 decision tree with the best split based on entropy."
            },
            "auc": {
              "type": "number",
              "description": "The auc resulting from training a depth 1 decision tree with the best split based on entropy."
            },
            "primitive": {
              "allOf": [{"$ref": "#/definitions/primitive_reference"}],
              "description": "A primitive used to compute these metafeatures."
            },
            "random_seed": {
              "type": "integer",
              "description": "Random seed used, if a primitive accepts a random seed."
            }
          },
          "required": [
            "primitive"
          ],
          "additionalProperties": true
        },
        "naive_bayes": {
          "type": "object",
          "description": "The results of training a naive bayes classifier on the data using default hyper-parameters.",
          "properties": {
            "error_rate": {
              "type": "number",
              "description": "The error rate resulting from training a naive bayes classifier on the data."
            },
            "kappa": {
              "type": "number",
              "description": "The kappa resulting from training a naive bayes classifier on the data."
            },
            "auc": {
              "type": "number",
              "description": "The auc resulting from training a naive bayes classifier on the data."
            },
            "primitive": {
              "allOf": [{"$ref": "#/definitions/primitive_reference"}],
              "description": "A primitive used to compute these metafeatures."
            },
            "random_seed": {
              "type": "integer",
              "description": "Random seed used, if a primitive accepts a random seed."
            }
          },
          "required": [
            "primitive"
          ],
          "additionalProperties": true
        },
        "linear_discriminant_analysis": {
          "type": "object",
          "description": "The results of doing linear discriminant analysis classification on the data using default hyper-parameters.",
          "properties": {
            "error_rate": {
              "type": "number",
              "description": "The error rate resulting from doing linear discriminant analysis classification on the data."
            },
            "kappa": {
              "type": "number",
              "description": "The kappa resulting from doing linear discriminant analysis classification on the data."
            },
            "auc": {
              "type": "number",
              "description": "The auc resulting from doing linear discriminant analysis classification on the data."
            },
            "primitive": {
              "allOf": [{"$ref": "#/definitions/primitive_reference"}],
              "description": "A primitive used to compute these metafeatures."
            },
            "random_seed": {
              "type": "integer",
              "description": "Random seed used, if a primitive accepts a random seed."
            }
          },
          "required": [
            "primitive"
          ],
          "additionalProperties": true
        },
        "knn_1_neighbor": {
          "type": "object",
          "description": "The results of training a knn classifier on the data with k=1 and other hyper-parameters set to defaults.",
          "properties": {
            "error_rate": {
              "type": "number",
              "description": "The error rate resulting from training a knn classifier on the data with k=1."
            },
            "kappa": {
              "type": "number",
              "description": "The kappa resulting from training a knn classifier on the data with k=1."
            },
            "auc": {
              "type": "number",
              "description": "The auc resulting from training a knn classifier on the data with k=1."
            },
            "primitive": {
              "allOf": [{"$ref": "#/definitions/primitive_reference"}],
              "description": "A primitive used to compute these metafeatures."
            },
            "random_seed": {
              "type": "integer",
              "description": "Random seed used, if a primitive accepts a random seed."
            }
          },
          "required": [
            "primitive"
          ],
          "additionalProperties": true
        },
        "c45_decision_tree": {
          "type": "object",
          "description": "The results of training a C4.5 decision tree (or equivalent implementation) on the data using default hyper-parameters.",
          "properties": {
            "error_rate": {
              "type": "number",
              "description": "The error rate resulting from training a C4.5 decision tree on the data."
            },
            "kappa": {
              "type": "number",
              "description": "The kappa resulting from training a C4.5 decision tree on the data."
            },
            "auc": {
              "type": "number",
              "description": "The auc resulting from training a C4.5 decision tree on the data."
            },
            "primitive": {
              "allOf": [{"$ref": "#/definitions/primitive_reference"}],
              "description": "A primitive used to compute these metafeatures."
            },
            "random_seed": {
              "type": "integer",
              "description": "Random seed used, if a primitive accepts a random seed."
            }
          },
          "required": [
            "primitive"
          ],
          "additionalProperties": true
        },
        "rep_tree": {
          "type": "object",
          "description": "The results of training a decision tree using reduced-error pruning (implementation equivalent to Weka's REPTree) on the data using default hyper-parameters.",
          "properties": {
            "depth_1_error_rate": {
              "type": "number",
              "description": "The error rate resulting from training a decision tree using reduced-error pruning on the data with tree depth 1."
            },
            "depth_1_kappa": {
              "type": "number",
              "description": "The kappa resulting from training a decision tree using reduced-error pruning on the data with tree depth 1."
            },
            "depth_1_auc": {
              "type": "number",
              "description": "The auc resulting from training a decision tree using reduced-error pruning on the data with tree depth 1."
            },
            "depth_2_error_rate": {
              "type": "number",
              "description": "The error rate resulting from training a decision tree using reduced-error pruning on the data with tree depth 2."
            },
            "depth_2_kappa": {
              "type": "number",
              "description": "The kappa resulting from training a decision tree using reduced-error pruning on the data with tree depth 2."
            },
            "depth_2_auc": {
              "type": "number",
              "description": "The auc resulting from training a decision tree using reduced-error pruning on the data with tree depth 2."
            },
            "depth_3_error_rate": {
              "type": "number",
              "description": "The error rate resulting from training a decision tree using reduced-error pruning on the data with tree depth 3."
            },
            "depth_3_kappa": {
              "type": "number",
              "description": "The kappa resulting from training a decision tree using reduced-error pruning on the data with tree depth 3."
            },
            "depth_3_auc": {
              "type": "number",
              "description": "The auc resulting from training a decision tree using reduced-error pruning on the data with tree depth 3."
            },
            "primitive": {
              "allOf": [{"$ref": "#/definitions/primitive_reference"}],
              "description": "A primitive used to compute these metafeatures."
            },
            "random_seed": {
              "type": "integer",
              "description": "Random seed used, if a primitive accepts a random seed."
            }
          },
          "required": [
            "primitive"
          ],
          "additionalProperties": true
        },
        "jrip": {
          "type": "object",
          "description": "The results of training a propositional rule learner (implementation equivalent to Weka's JRip), Repeated Incremental Pruning to Produce Error Reduction (RIPPER), which was proposed by William W. Cohen as an optimized version of IREP.",
          "properties": {
            "error_rate": {
              "type": "number",
              "description": "The error rate resulting from training a propositional rule learner."
            },
            "kappa": {
              "type": "number",
              "description": "The kappa rate resulting from training a propositional rule learner."
            },
            "auc": {
              "type": "number",
              "description": "The auc resulting from training a propositional rule learner."
            },
            "primitive": {
              "allOf": [{"$ref": "#/definitions/primitive_reference"}],
              "description": "A primitive used to compute these metafeatures."
            },
            "random_seed": {
              "type": "integer",
              "description": "Random seed used, if a primitive accepts a random seed."
            }
          },
          "required": [
            "primitive"
          ],
          "additionalProperties": true
        },
        "naive_bayes_tree": {
          "type": "object",
          "description": "A decision tree with naive bayes classifiers at the leaves.",
          "properties": {
            "error_rate": {
              "type": "number",
              "description": "The error rate resulting from training with the naive bayes tree algorithm."
            },
            "kappa": {
              "type": "number",
              "description": "The kappa rate resulting from training with the naive bayes tree algorithm."
            },
            "auc": {
              "type": "number",
              "description": "The auc resulting from training with the naive bayes tree algorithm."
            },
            "primitive": {
              "allOf": [{"$ref": "#/definitions/primitive_reference"}],
              "description": "A primitive used to compute these metafeatures."
            },
            "random_seed": {
              "type": "integer",
              "description": "Random seed used, if a primitive accepts a random seed."
            }
          },
          "required": [
            "primitive"
          ],
          "additionalProperties": true
        }
      },
      "additionalProperties": true
    },
    "docker_image": {
      "description": "A reference to a docker image, including a name and a digest.",
      "type": "object",
      "properties": {
        "image_name": {
          "type": "string",
          "description": "Docker image name including a label, and optionally prefixed with a registry."
        },
        "image_digest": {
          "type": "string",
          "description": "Docker image digest.",
          "pattern": "^sha256:[a-fA-F0-9]{64}$"
        }
      },
      "required": [
        "image_name",
        "image_digest"
      ],
      "additionalProperties": true
    },
    "installation": {
      "type": "array",
      "description": "Installation instructions for a primitive. Everything listed has to be installed, in order listed, for a primitive to work.",
      "items": {
        "type": "object",
        "oneOf": [
          {
            "properties": {
              "type": {
                "type": "string",
                "enum": ["PIP"],
                "description": "A Python package."
              },
              "package": {
                "type": "string",
                "description": "Python package name."
              },
              "version": {
                "allOf": [{"$ref": "#/definitions/version"}],
                "description": "Exact version string."
              },
              "registry": {
                "type": "string"
              }
            },
            "required": [
              "package",
              "type",
              "version"
            ]
          },
          {
            "properties": {
              "type": {
                "type": "string",
                "enum": ["PIP"],
                "description": "A Python package. It should be installed with pip's \"--editable\" argument enabled."
              },
              "package_uri": {
                "type": "string",
                "description": "Python package's canonical URI for installation with an exact version of the package, ideally git commit hash. If it is a git URI, \"#egg=package_name\" URI suffix is required."
              }
            },
            "required": [
              "package_uri",
              "type"
            ]
          },
          {
            "allOf": [
              {
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": ["DOCKER"],
                    "description": "A Docker image."
                  },
                  "key": {
                    "type": "string",
                    "description": "When this Docker image runs, its address should be exposed to the primitive under this key."
                  }
                },
                "required": [
                  "type",
                  "key"
                ]
              },
              {
                "$ref": "#/definitions/docker_image"
              }
            ]
          },
          {
            "properties": {
              "type": {
                "type": "string",
                "enum": ["UBUNTU"],
                "description": "A system package."
              },
              "package": {
                "type": "string",
                "description": "Ubuntu package name."
              },
              "version": {
                "type": "string",
                "description": "Exact version string. While the version is required it is not required to install exactly this version of the package with a primitive because generally it is hard to get a hold of an old version to install (old packages get removed or moved to an archive). Knowing a version author of a primitive used can help with debugging to maybe understand why a primitive is misbehaving."
              }
            },
            "required": [
              "package",
              "type",
              "version"
            ]
          },
          {
            "properties": {
              "type": {
                "type": "string",
                "enum": ["FILE"],
                "description": "A file to be downloaded and then provided as a volume to the primitive during its run. Download should be equivalent to the example: \"curl https://example.com/file > /path/to/volume_file\"."
              },
              "key": {
                "type": "string",
                "description": "A downloaded file path should be exposed to the primitive under this key."
              },
              "file_uri": {
                "type": "string",
                "description": "Where to download the file from.",
                "format": "uri"
              },
              "file_digest": {
                "type": "string",
                "description": "A SHA256 hexadecimal digest of the file.",
                "pattern": "^[a-fA-F0-9]{64}$"
              }
            },
            "required": [
              "key",
              "type",
              "file_uri",
              "file_digest"
            ]
          },
          {
            "properties": {
              "type": {
                "type": "string",
                "enum": ["TGZ"],
                "description": "A gzipped tar file to be downloaded, extracted to a directory, which is then provided as a volume to the primitive during its run. Extraction should be equivalent to the example: \"curl https://example.com/file.tgz | tar -xz -C /path/to/volume_dir\"."
              },
              "key": {
                "type": "string",
                "description": "An extracted directory path should be exposed to the primitive under this key."
              },
              "file_uri": {
                "type": "string",
                "description": "Where to download the file from.",
                "format": "uri"
              },
              "file_digest": {
                "type": "string",
                "description": "A SHA256 hexadecimal digest of the file.",
                "pattern": "^[a-fA-F0-9]{64}$"
              }
            },
            "required": [
              "key",
              "type",
              "file_uri",
              "file_digest"
            ]
          }
        ],
        "additionalProperties": true
      },
      "minItems": 1
    },
    "primitive_code": {
      "type": "object",
      "description": "Metadata describing the primitive's code.",
      "properties": {
        "class_type_arguments": {
          "type": "object",
          "description": "A map between type variables in primitive interfaces and their specified types for this primitive.",
          "additionalProperties": {
            "$ref": "#/definitions/structural_type"
          }
        },
        "interfaces_version": {
          "description": "Version of d3m package in use by the primitive.",
          "allOf": [{"$ref": "#/definitions/version"}]
        },
        "interfaces": {
          "type": "array",
          "description": "A list of Python primitive interface classes used by the primitive in method resolution order.",
          "items": {
            "type": "string"
          },
          "minItems": 1
        },
        "params": {
          "type": "object",
          "description": "A map between primitive's parameter names and their types.",
          "additionalProperties": {
            "$ref": "#/definitions/structural_type"
          }
        },
        "hyperparams": {
          "$ref": "#/definitions/hyperparams_configuration"
        },
        "arguments": {
          "type": "object",
          "description": "A map describing all arguments which the primitive as a whole accepts, mapping the name of the argument to its description.",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "type": {
                "$ref": "#/definitions/structural_type"
              },
              "kind": {
                "type": "string",
                "oneOf": [
                  {"enum": ["RUNTIME"], "description": "Arguments which are meaningful only for a runtime executing a pipeline."},
                  {"enum": ["PIPELINE"], "description": "Arguments which can be fulfilled by other primitives in a pipeline."},
                  {"enum": ["HYPERPARAMETER"], "description": "Arguments which are overriding a hyper-parameter value for a method call."}
                ]
              },
              "default": {
                "allOf": [{"$ref": "#/definitions/python_value"}],
                "description": "A default value. Omitted if an argument has no default value."
              }
            },
            "required": [
              "type",
              "kind"
            ],
            "additionalProperties": true
          }
        },
        "class_methods": {
          "type": "object",
          "description": "A map between primitive's class method names and their descriptions.",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "description": {
                "$ref": "#/definitions/description"
              },
              "arguments": {
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "$ref": "#/definitions/structural_type"
                    },
                    "default": {
                      "allOf": [{"$ref": "#/definitions/python_value"}],
                      "description": "A default value. Omitted if an argument has no default value."
                    }
                  },
                  "additionalProperties": true,
                  "required": [
                    "type"
                  ]
                }
              },
              "returns": {
                "$ref": "#/definitions/structural_type"
              }
            },
            "required": [
              "returns"
            ],
            "additionalProperties": true
          }
        },
        "instance_methods": {
          "type": "object",
          "description": "A map between primitive's instance method names and their descriptions.",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "oneOf": [
                  {"enum": ["PRODUCE"], "description": "Methods which outputs can be inputs to another primitive."},
                  {"enum": ["OTHER"], "description": "Methods used by the runtime."}
                ]
              },
              "description": {
                "$ref": "#/definitions/description"
              },
              "arguments": {
                "type": "array",
                "description": "A list of argument names this method accepts. Their description can be found in primitive's \"arguments\" map.",
                "items": {
                  "type": "string"
                }
              },
              "returns": {
                "$ref": "#/definitions/structural_type"
              },
              "singleton": {
                "type": "boolean",
                "description": "Is a produce method a singleton produce method?"
              },
              "inputs_across_samples": {
                "type": "array",
                "description": "List of inputs a produce method uses across samples and not sample by sample.",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "kind",
              "arguments",
              "returns"
            ],
            "additionalProperties": true
          }
        },
        "class_attributes": {
          "type": "object",
          "description": "A map between primitive's class attribute names and their types.",
          "additionalProperties": {
            "$ref": "#/definitions/structural_type"
          }
        },
        "instance_attributes": {
          "type": "object",
          "description": "A map between primitive's instance attribute names and their types.",
          "additionalProperties": {
            "$ref": "#/definitions/structural_type"
          }
        }
      },
      "required": [
        "class_type_arguments",
        "interfaces_version",
        "interfaces"
      ],
      "additionalProperties": true
    },
    "hyperparams_configuration": {
      "type": "object",
      "description": "A map describing the hyper-parameter configuration of the primitive, mapping the name of the hyper-parameter to its description.",
      "additionalProperties": {
        "$ref": "#/definitions/hyperparameter"
      }
    },
    "hyperparameter": {
      "type": "object",
      "description": "Description of a hyper-parameter.",
      "properties": {
        "type": {
          "allOf": [{"$ref": "#/definitions/python_type"}],
          "description": "A Python type of the hyper-parameter description itself."
        },
        "default": {
          "allOf": [{"$ref": "#/definitions/python_value"}],
          "description": "A default value."
        },
        "structural_type": {
          "$ref": "#/definitions/structural_type"
        },
        "semantic_types": {
          "$ref": "#/definitions/semantic_types"
        },
        "description": {
          "$ref": "#/definitions/description"
        },
        "lower": {
          "$ref": "#/definitions/python_value"
        },
        "upper": {
          "$ref": "#/definitions/python_value"
        },
        "upper_inclusive": {
          "type": "boolean"
        },
        "q": {
          "type": "number"
        },
        "mu": {
          "type": "number"
        },
        "sigma": {
          "type": "number"
        },
        "values": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/python_value"
          }
        },
        "configuration": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/hyperparameter"
          }
        },
        "primitive_families": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "algorithm_types": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "choices": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/hyperparams_configuration"
          }
        },
        "elements": {
          "anyOf": [
            {
              "$ref": "#/definitions/hyperparameter"
            },
            {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/hyperparameter"
              }
            }
          ]
        },
        "is_configuration": {
          "type": "boolean"
        },
        "min_size": {
          "type": "integer"
        },
        "max_size": {
          "type": "integer"
        }
      },
      "required": [
        "type",
        "default",
        "structural_type",
        "semantic_types"
      ],
      "additionalProperties": true
    },
    "structural_type": {
      "$ref": "#/definitions/python_type"
    },
    "media_types": {
      "type": "array",
      "description": "Media type of the value in its extended form defining encoding, e.g., \"text/plain; charset=utf-8\".",
      "items": {
        "type": "string"
      },
      "minItems": 1
    },
    "sampling_rate": {
      "type": "number",
      "description": "Sampling rate (frequency) is the number of samples per second."
    },
    "time_granularity": {
      "type": "object",
      "properties": {
        "value": {
          "type": "number"
        },
        "unit": {
          "enum": [
            "SECONDS",
            "MINUTES",
            "DAYS",
            "WEEKS",
            "MONTHS",
            "YEARS",
            "UNSPECIFIED"
          ]
        }
      },
      "required": [
        "value",
        "unit"
      ],
      "additionalProperties": true
    },
    "spatial_reference_system": {
      "type": "string"
    },
    "stored_size": {
      "type": "integer",
      "description": "Size in bytes when or if stored to disk."
    },
    "approximate_stored_size": {
      "type": "integer",
      "description": "Approximate size in bytes when or if stored to disk."
    },
    "semantic_types": {
      "type": "array",
      "description": "A list of canonical URIs defining semantic types. Some commonly used URIs are listed as possible values here, but you can use any URI representing a semantic type.",
      "items": {
        "anyOf": [
          {"enum": ["http://schema.org/ImageObject"], "description": "Value is an image."},
          {"enum": ["http://schema.org/VideoObject"], "description": "Value is a video."},
          {"enum": ["http://schema.org/AudioObject"], "description": "Value is an audio clip."},
          {"enum": ["http://schema.org/Text"], "description": "Value is text/string."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/Speech"], "description": "Value is an audio clip of human speech."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/Graph"], "description": "Value is a graph structure or a node list of a graph structure."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/EdgeList"], "description": "Value is an edge list of a graph structure."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/Table"], "description": "Value is tabular data."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/Timeseries"], "description": "Value is time-series data."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/UnspecifiedStructure"], "description": "Value has unspecified structure."},
          {"enum": ["http://schema.org/Boolean"], "description": "Value represents a boolean."},
          {"enum": ["http://schema.org/Integer"], "description": "Value represents an integer."},
          {"enum": ["http://schema.org/Float"], "description": "Value represents a float."},
          {"enum": ["http://schema.org/DateTime"], "description": "Value represents a timestamp."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/FloatVector"], "description": "Value represents a vector of floats.", "parents": ["http://schema.org/DataType"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/JSON"], "description": "Value represents a JSON object.", "parents": ["http://schema.org/DataType"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/GeoJSON"], "description": "Value represents a GeoJSON object.", "parents": ["https://metadata.datadrivendiscovery.org/types/JSON"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/CategoricalData"], "description": "Value represents categorical data."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/OrdinalData"], "description": "Value represents ordinal data."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"], "description": "A column can have a role in a table."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/PrimaryKey"], "description": "Value serves as a primary key.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/PrimaryMultiKey"], "description": "Value serves as a primary key without uniqueness constraint to allow the same row to be repeated multiple times.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/UniqueKey"], "description": "Value serves as an unique key, i.e., it satisfies the uniqueness constraint among other values.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/SuggestedGroupingKey"], "description": "Value serves as a potential grouping key to group rows (samples) together. Used in time-series datasets containing multiple time-series to hint how to identify individual time-series. If there are multiple columns with this semantic type the relation between them is unspecified, they can be used individually or in combination.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/GroupingKey"], "description": "Value serves as an active grouping key to group rows (samples) together. Used in time-series datasets containing multiple time-series to identify individual time-series. Each column with this semantic type should be used individually and if multiple columns with this semantic type exist, each column represent a different grouping.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/Attribute"], "description": "Value serves as an attribute (input feature) to fit on or be used for analysis.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/ConstructedAttribute"], "description": "Value serves as a constructed attribute (input feature). This is set by primitives when constructing attributes. It should not be used for fitting.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/SuggestedTarget"], "description": "Value serves as a potential target variable for a problem. This is a property of input data.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/RedactedTarget"], "description": "Value is redacted, but would otherwise be a target variable for a problem. This is a property of input data.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/Target"], "description": "Value serves as a target variable for a problem.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/PredictedTarget"], "description": "Value serves as a predict target variable for a problem. This is set by primitives when predicting targets.", "parents": ["https://metadata.datadrivendiscovery.org/types/Target"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/TrueTarget"], "description": "Value serves as a true target variable for a problem. This is set by a runtime based on problem description.", "parents": ["https://metadata.datadrivendiscovery.org/types/Target"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/Score"], "description": "Value serves as a score of a predicted target variable. \"score_for\" metadata can be used to reference for which target column(s) this column is score for.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/Likelihood"], "description": "Value serves as a likelihood of a predicted target variable. \"score_for\" metadata can be used to reference for which target column(s) this column is likelihood for.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/LogLikelihood"], "description": "Value serves as a log likelihood of a predicted target variable. \"score_for\" metadata can be used to reference for which target column(s) this column is log likelihood for.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/Rank"], "description": "Value serves as a rank of a predicted target variable. \"rank_for\" metadata can be used to reference for which target column(s) this column is rank for.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/SuggestedPrivilegedData"], "description": "Value serves as a potential privileged (available during fitting but not producing) attribute.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/RedactedPrivilegedData"], "description": "Value is redacted, but would otherwise be a privileged attribute.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/PrivilegedData"], "description": "Value serves as a privileged (available during fitting but not producing) attribute.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/EdgeSource"], "description": "Value serves as a source of a graph edge.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/DirectedEdgeSource"], "description": "Value serves as a source of a directed graph edge.", "parents": ["https://metadata.datadrivendiscovery.org/types/EdgeSource"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/UndirectedEdgeSource"], "description": "Value serves as a source of a undirected graph edge.", "parents": ["https://metadata.datadrivendiscovery.org/types/EdgeSource"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/SimpleEdgeSource"], "description": "Value serves as a source of a simple graph edge.", "parents": ["https://metadata.datadrivendiscovery.org/types/EdgeSource"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/MultiEdgeSource"], "description": "Value serves as a source of a multigraph edge.", "parents": ["https://metadata.datadrivendiscovery.org/types/EdgeSource"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/EdgeTarget"], "description": "Value serves as a target of a graph edge.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/DirectedEdgeTarget"], "description": "Value serves as a target of a directed graph edge.", "parents": ["https://metadata.datadrivendiscovery.org/types/EdgeTarget"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/UndirectedEdgeTarget"], "description": "Value serves as a target of a undirected graph edge.", "parents": ["https://metadata.datadrivendiscovery.org/types/EdgeTarget"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/SimpleEdgeTarget"], "description": "Value serves as a target of a simple graph edge.", "parents": ["https://metadata.datadrivendiscovery.org/types/EdgeTarget"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/MultiEdgeTarget"], "description": "Value serves as a target of a multigraph edge.", "parents": ["https://metadata.datadrivendiscovery.org/types/EdgeTarget"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/Time"], "description": "Value represents time.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/Location"], "description": "Value represents a location.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/Boundary"], "description": "Value represents a boundary.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/Interval"], "description": "Value represents an interval as a pair of start and end.", "parents": ["https://metadata.datadrivendiscovery.org/types/Boundary"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/IntervalStart"], "description": "Value represents a start of an interval.", "parents": ["https://metadata.datadrivendiscovery.org/types/Boundary"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/IntervalEnd"], "description": "Value represents an end of an interval.", "parents": ["https://metadata.datadrivendiscovery.org/types/Boundary"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/BoundingPolygon"], "description": "Value represents a bounding polygon as a series of (X, Y) coordinate pairs of vertices in counter-clockwise order.", "parents": ["https://metadata.datadrivendiscovery.org/types/Boundary"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/LocationPolygon"], "description": "Value represents a location polygon whose vertices are geo coordinates in the spatial reference system used. Used in remote sensing datasets. The number of elements is determined by the standards of the spatial reference system used. The order is not specified and should be inferred.", "parents": ["https://metadata.datadrivendiscovery.org/types/Location"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/InstanceWeight"], "description": "Value serves as a weight for an instance.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/BagKey"], "description": "Value is a bag identifier for multiple instance learning problem type.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/Band"], "description": "Multi-spectral images can have each band image as a separate instance and this value identifies the image band of the instance.", "parents": ["https://metadata.datadrivendiscovery.org/types/ColumnRole"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/UnknownType"], "description": "It is not known what the value represents."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/FileName"], "description": "Value is a filename."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/DimensionType"], "description": "Value represents a dimension."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/DatasetResource"], "description": "Value is a dataset resource.", "parents": ["https://metadata.datadrivendiscovery.org/types/DimensionType"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/TabularRow"], "description": "Value is a row in tabular data.", "parents": ["https://metadata.datadrivendiscovery.org/types/DimensionType"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/TabularColumn"], "description": "Value is a column in tabular data.", "parents": ["https://metadata.datadrivendiscovery.org/types/DimensionType"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/MissingData"], "description": "Value is missing."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/InvalidData"], "description": "Value is present, but is invalid."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/HyperParameter"], "description": "Value is a hyper-parameter."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/TuningParameter"], "description": "Hyper-parameter is a tuning parameter of the primitive.", "parents": ["https://metadata.datadrivendiscovery.org/types/HyperParameter"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/ControlParameter"], "description": "Hyper-parameter is a control parameter of the primitive.", "parents": ["https://metadata.datadrivendiscovery.org/types/HyperParameter"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/ResourcesUseParameter"], "description": "Hyper-parameter is a parameter which controls the use of resources by the primitive.", "parents": ["https://metadata.datadrivendiscovery.org/types/HyperParameter"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/CPUResourcesUseParameter"], "description": "Hyper-parameter is a parameter which controls the use of CPU resources (cores) by the primitive.", "parents": ["https://metadata.datadrivendiscovery.org/types/ResourcesUseParameter"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/MetafeatureParameter"], "description": "Hyper-parameter controls which meta-feature is computed by the primitive.", "parents": ["https://metadata.datadrivendiscovery.org/types/HyperParameter"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/ChoiceParameter"], "description": "Hyper-parameter is selecting one choice among multiple hyper-parameters space choices.", "parents": ["https://metadata.datadrivendiscovery.org/types/HyperParameter"]},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/DatasetEntryPoint"], "description": "Resource is a dataset entry point."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/FilesCollection"], "description": "Resource is a files collection."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/TokenizableIntoNumericAndAlphaTokens"], "description": "Value can be tokenized into pure numeric tokens (satisfies \"isdigit\") and pure alphabetic tokens(satisfies \"isalpha\"). E.g., value \"123abc456\" can be tokenized into (\"123\", \"abc\", \"456\")."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/TokenizableByPunctuation"], "description": "Value can be tokenized by splitting on punctuation. E.g., value \"ab_cd;12\" can be tokenized into (\"ab\", \"cd\", \"12\")."},
          {"enum": ["https://metadata.datadrivendiscovery.org/types/AmericanPhoneNumber"], "description": "Value can be recognized as an American style phone number, e.g., \"(310)822-1511\" and \"1-310-822-1511\"."},
          {"enum": ["http://schema.org/email"], "description": "Value is an email address."},
          {"enum": ["http://schema.org/URL"], "description": "Value represents a URL."},
          {"enum": ["http://schema.org/address"], "description": "Value is an address, broadly defined."},
          {"enum": ["http://schema.org/State"], "description": "Value is a state, could be US or foreign."},
          {"enum": ["http://schema.org/City"], "description": "Value is a city, could be US or foreign."},
          {"enum": ["http://schema.org/Country"], "description": "Value is a country."},
          {"enum": ["http://schema.org/addressCountry"], "description": "Value is a country code."},
          {"enum": ["http://schema.org/postalCode"], "description": "Value is a US postal code."},
          {"enum": ["http://schema.org/latitude"], "description": "Value represents a latitude."},
          {"enum": ["http://schema.org/longitude"], "description": "Value represents a longitude."},
          {
            "type": "string",
            "description": "A URI not listed among commonly used URIs. Please feel encouraged to open a merge request adding semantic types you are using so that also others can learn about them.",
            "format": "uri"
          }
        ]
      }
    },
    "location_uris": {
      "type": "array",
      "description": "A list of URIs where the value is stored.",
      "items": {
        "type": "string",
        "format": "uri"
      }
    },
    "location_base_uris": {
      "type": "array",
      "description": "A list of URIs which can be used as a base to determine where the value is stored.",
      "items": {
        "type": "string",
        "format": "uri"
      }
    },
    "source": {
      "type": "object",
      "description": "Information about the source. Author and other information how the value came to be.",
      "properties": {
        "name": {
          "$ref": "#/definitions/name"
        },
        "contact": {
          "type": "string",
          "description": "An URI to contact the source.",
          "format": "uri"
        },
        "uris": {
          "type": "array",
          "description": "A list of URIs where the value is coming from, e.g., website with a dataset, or source code for a primitive.",
          "items": {
            "type": "string",
            "format": "uri"
          }
        },
        "published": {
          "allOf": [{"$ref": "#/definitions/timestamp"}],
          "description": "A timestamp when was the value made available."
        },
        "license": {
          "type": "string",
          "description": "License under which the value is available."
        },
        "citation": {
          "type": "string",
          "description": "Citation of the source."
        },
        "human_subjects_research": {
          "type": "boolean",
          "description": "Does value contain human subjects data or not."
        },
        "redacted": {
          "type": "boolean",
          "description": "Has the value been redacted."
        },
        "from": {
          "type": "object",
          "oneOf": [
            {
              "properties": {
                "type": {
                  "type": "string",
                  "enum": ["REDACTED"],
                  "description": "The value has been redacted from the referenced value."
                },
                "dataset": {
                  "$ref": "#/definitions/dataset_reference"
                }
              },
              "required": [
                "dataset",
                "type"
              ]
            },
            {
              "properties": {
                "type": {
                  "type": "string",
                  "enum": ["REDACTED"],
                  "description": "The value has been redacted from the referenced value."
                },
                "problem": {
                  "$ref": "#/definitions/problem_reference"
                }
              },
              "required": [
                "problem",
                "type"
              ]
            },
            {
              "properties": {
                "type": {
                  "type": "string",
                  "enum": ["PIPELINE"],
                  "description": "The pipeline has been derived from another pipeline or pipelines."
                },
                "pipelines": {
                  "type": "array",
                  "description": "A list of pipelines used to derive the pipeline.",
                  "items": {
                    "$ref": "#/definitions/pipeline_reference"
                  },
                  "minItems": 1
                }
              },
              "required": [
                "pipelines",
                "type"
              ]
            }
          ],
          "additionalProperties": true
        }
      },
      "additionalProperties": true
    },
    "keywords": {
      "type": "array",
      "description": "A list of keywords. Strings in an unspecified language and vocabulary.",
      "items": {
        "type": "string"
      }
    },
    "foreign_key": {
      "type": "object",
      "description": "Columns in a table in a dataset resource can reference other resources.",
      "oneOf": [
        {
          "properties": {
            "type": {
              "type": "string",
              "enum": ["COLUMN"],
              "description": "The foreign key is referencing a column in a table in a dataset resource."
            },
            "resource_id": {
              "$ref": "#/definitions/resource_id"
            },
            "column_index": {
              "$ref": "#/definitions/column_index"
            }
          },
          "required": [
            "type",
            "resource_id",
            "column_index"
          ]
        },
        {
          "properties": {
            "type": {
              "type": "string",
              "enum": ["COLUMN"],
              "description": "The foreign key is referencing a column in a table in a dataset resource."
            },
            "resource_id": {
              "$ref": "#/definitions/resource_id"
            },
            "column_name": {
              "$ref": "#/definitions/column_name"
            }
          },
          "required": [
            "type",
            "resource_id",
            "column_name"
          ]
        },
        {
          "properties": {
            "type": {
              "type": "string",
              "enum": ["NODE_ATTRIBUTE"],
              "description": "The foreign key is referencing a node attribute in a dataset resource, a graph."
            },
            "resource_id": {
              "$ref": "#/definitions/resource_id"
            },
            "node_attribute": {
              "$ref": "#/definitions/column_name"
            }
          },
          "required": [
            "type",
            "resource_id",
            "node_attribute"
          ]
        },
        {
          "properties": {
            "type": {
              "type": "string",
              "enum": ["EDGE_ATTRIBUTE"],
              "description": "The foreign key is referencing an edge attribute in a dataset resource, a graph."
            },
            "resource_id": {
              "$ref": "#/definitions/resource_id"
            },
            "edge_attribute": {
              "$ref": "#/definitions/column_name"
            }
          },
          "required": [
            "type",
            "resource_id",
            "edge_attribute"
          ]
        },
        {
          "properties": {
            "type": {
              "type": "string",
              "enum": ["RESOURCE"],
              "description": "The foreign key is referencing another dataset resource. The value is resource ID."
            }
          },
          "required": [
            "type"
          ]
        }
      ]
    },
    "boundary_for": {
      "type": "object",
      "description": "A column in a table can be a boundary for another column in the same table or a table in another dataset resource.",
      "oneOf": [
        {
          "properties": {
            "resource_id": {
              "$ref": "#/definitions/resource_id"
            },
            "column_index": {
              "$ref": "#/definitions/column_index"
            }
          },
          "required": [
            "column_index"
          ]
        },
        {
          "properties": {
            "resource_id": {
              "$ref": "#/definitions/resource_id"
            },
            "column_name": {
              "$ref": "#/definitions/column_name"
            }
          },
          "required": [
            "column_name"
          ]
        }
      ]
    },
    "score_for": {
      "type": "object",
      "description": "A column in a table can be a score for other columns in the same table or a table in another dataset resource.",
      "oneOf": [
        {
          "properties": {
            "resource_id": {
              "$ref": "#/definitions/resource_id"
            },
            "column_indices": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/column_index"
              },
              "minItems": 1
            }
          },
          "required": [
            "column_indices"
          ]
        },
        {
          "properties": {
            "resource_id": {
              "$ref": "#/definitions/resource_id"
            },
            "column_names": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/column_name"
              },
              "minItems": 1
            }
          },
          "required": [
            "column_names"
          ]
        }
      ]
    },
    "rank_for": {
      "type": "object",
      "description": "A column in a table can be a rank for other columns in the same table or a table in another dataset resource.",
      "oneOf": [
        {
          "properties": {
            "resource_id": {
              "$ref": "#/definitions/resource_id"
            },
            "column_indices": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/column_index"
              },
              "minItems": 1
            }
          },
          "required": [
            "column_indices"
          ]
        },
        {
          "properties": {
            "resource_id": {
              "$ref": "#/definitions/resource_id"
            },
            "column_names": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/column_name"
              },
              "minItems": 1
            }
          },
          "required": [
            "column_names"
          ]
        }
      ]
    },
    "algorithm_types": {
      "type": "array",
      "description": "Algorithm type describes the underlying implementation of the primitive. It uses controlled, standardized, but open vocabulary which means that if types which would best describe your primitive are missing, please feel encouraged to open a merge request adding them.",
      "items": {
        "oneOf": [
          {"enum": ["ACCURACY_SCORE"], "description": "https://en.wikipedia.org/wiki/Accuracy_and_precision"},
          {"enum": ["ADABOOST"], "description": "https://en.wikipedia.org/wiki/AdaBoost"},
          {"enum": ["ADAPTIVE_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Adaptive_algorithm"},
          {"enum": ["AGGREGATE_FUNCTION"], "description": "https://en.wikipedia.org/wiki/Aggregate_function"},
          {"enum": ["ALMEIDA_PINEDA_RECURRENT_BACKPROPAGATION"], "description": "https://en.wikipedia.org/wiki/Almeida%E2%80%93Pineda_recurrent_backpropagation"},
          {"enum": ["ALOPEX"], "description": "https://en.wikipedia.org/wiki/ALOPEX"},
          {"enum": ["ALTERNATING_DECISION_TREE"], "description": "https://en.wikipedia.org/wiki/Alternating_decision_tree"},
          {"enum": ["ANT_COLONY_OPTIMIZATION"], "description": "https://en.wikipedia.org/wiki/Ant_colony_optimization_algorithms"},
          {"enum": ["APPROXIMATE_DATA_AUGMENTATION"], "description": "Augmenting data approximately using data that has the best matching score."},
          {"enum": ["ARRAY_CONCATENATION"]},
          {"enum": ["ARRAY_SLICING"], "description": "https://en.wikipedia.org/wiki/Array_slicing"},
          {"enum": ["ASSOCIATION_RULE_LEARNING"], "description": "https://en.wikipedia.org/wiki/Association_rule_learning"},
          {"enum": ["ASSOCIATIVE_NEURAL_NETWORK"]},
          {"enum": ["ATTRACTOR_NETWORK"], "description": "https://en.wikipedia.org/wiki/Attractor_network"},
          {"enum": ["AUDIO_MIXING"], "description": "https://en.wikipedia.org/wiki/Audio_mixing_(recorded_music)"},
          {"enum": ["AUDIO_STREAM_MANIPULATION"], "description": "https://en.wikipedia.org/wiki/Audio_signal_processing"},
          {"enum": ["AUGMENTED_LAGRANGIAN_METHOD"], "description": "https://en.wikipedia.org/wiki/Augmented_Lagrangian_method"},
          {"enum": ["AUTOENCODER"], "description": "https://en.wikipedia.org/wiki/Autoencoder"},
          {"enum": ["AUTOREGRESSIVE_INTEGRATED_MOVING_AVERAGE"], "description": "https://en.wikipedia.org/wiki/Autoregressive_integrated_moving_average"},
          {"enum": ["BACKWARD_DIFFERENCE_CODING"], "description": "https://stats.idre.ucla.edu/r/library/r-library-contrast-coding-systems-for-categorical-variables/#backward"},
          {"enum": ["BAG_OF_TRICKS"], "description": "https://wiki.math.uwaterloo.ca/statwiki/index.php?title=Bag_of_Tricks_for_Efficient_Text_Classification#N-Gram.2C_Bag_of_Words.2C_and_TFIDF"},
          {"enum": ["BAG_OF_WORDS_MODEL"], "description": "https://en.wikipedia.org/wiki/Bag-of-words_model"},
          {"enum": ["BATCH_NORMALIZATION"]},
          {"enum": ["BAYESIAN_LINEAR_REGRESSION"], "description": "https://en.wikipedia.org/wiki/Bayesian_linear_regression"},
          {"enum": ["BAYESIAN_MODEL_AVERAGING"], "description": "https://en.wikipedia.org/wiki/Bootstrap_aggregating"},
          {"enum": ["BAYESIAN_NETWORK"], "description": "https://en.wikipedia.org/wiki/Bayesian_network"},
          {"enum": ["BAYESIAN_OPTIMIZATION"]},
          {"enum": ["BELIEF_PROPAGATION"], "description": "https://en.wikipedia.org/wiki/Belief_propagation"},
          {"enum": ["BERT"], "description": "https://arxiv.org/abs/1810.04805"},
          {"enum": ["BINARY_CLASSIFICATION"], "description": "https://en.wikipedia.org/wiki/Binary_classification"},
          {"enum": ["BIRCH"], "description": "https://en.wikipedia.org/wiki/Bayesian_optimization"},
          {"enum": ["BOLTZMANN_MACHINE"], "description": "https://en.wikipedia.org/wiki/BIRCH"},
          {"enum": ["BOOSTING"], "description": "https://en.wikipedia.org/wiki/Boltzmann_machine"},
          {"enum": ["BOOTSTRAP_AGGREGATING"], "description": "https://en.wikipedia.org/wiki/Boosting_(machine_learning)"},
          {"enum": ["BOOTSTRAPPING"], "description": "https://en.wikipedia.org/wiki/Bootstrapping_(statistics)"},
          {"enum": ["BRANCH_AND_BOUND"], "description": "https://en.wikipedia.org/wiki/Branch_and_bound"},
          {"enum": ["BREADTH_FIRST_SEARCH"], "description": "https://en.wikipedia.org/wiki/Breadth-first_search"},
          {"enum": ["BRIER_SCORE"], "description": "https://en.wikipedia.org/wiki/Brier_score"},
          {"enum": ["BROOKS_IYENGAR"], "description": "https://en.wikipedia.org/wiki/Brooks%E2%80%93Iyengar_algorithm"},
          {"enum": ["BROWNBOOST"], "description": "https://en.wikipedia.org/wiki/BrownBoost"},
          {"enum": ["C45"], "description": "https://en.wikipedia.org/wiki/C4.5_algorithm"},
          {"enum": ["C50"]},
          {"enum": ["CANONICAL_CORRELATION_ANALYSIS"], "description": "https://en.wikipedia.org/wiki/Canonical_correlation"},
          {"enum": ["CASCADE_CORRELATION_NETWORK"]},
          {"enum": ["CASE_BASED_REASONING"], "description": "https://en.wikipedia.org/wiki/Case-based_reasoning"},
          {"enum": ["CATEGORY_ENCODER"]},
          {"enum": ["CAUSAL_ANALYSIS"], "description": "https://en.wikipedia.org/wiki/Causal_analysis"},
          {"enum": ["CLASSIFIER_CHAINS"], "description": "https://en.wikipedia.org/wiki/Classifier_chains"},
          {"enum": ["CN2"], "description": "https://en.wikipedia.org/wiki/CN2_algorithm"},
          {"enum": ["COBWEB"], "description": "https://en.wikipedia.org/wiki/Cobweb_(clustering)"},
          {"enum": ["COEFFICIENT_OF_DETERMINATION"], "description": "https://en.wikipedia.org/wiki/Coefficient_of_determination"},
          {"enum": ["COLOR_SPACE_CONVERSION"], "description": "https://en.wikipedia.org/wiki/Color_space"},
          {"enum": ["COMMITTEE_MACHINE"], "description": "https://en.wikipedia.org/wiki/Committee_machine"},
          {"enum": ["COMPOSITIONAL_PATTERN_PRODUCING_NETWORK"], "description": "https://en.wikipedia.org/wiki/Compositional_pattern-producing_network"},
          {"enum": ["COMPUTER_ALGEBRA"], "description": "https://en.wikipedia.org/wiki/Computer_algebra"},
          {"enum": ["CONDITIONAL_RANDOM_FIELD"], "description": "https://en.wikipedia.org/wiki/Conditional_random_field"},
          {"enum": ["CONTEXTUAL_BANDIT"]},
          {"enum": ["CONVOLUTIONAL_NEURAL_NETWORK"], "description": "https://en.wikipedia.org/wiki/Convolutional_neural_network"},
          {"enum": ["CONVOLUTIONAL_NEURAL_NETWORK_LAYER"], "description": "https://en.wikipedia.org/wiki/Convolutional_neural_network#Convolutional_layer"},
          {"enum": ["COORDINATE_DESCENT"], "description": "https://en.wikipedia.org/wiki/Coordinate_descent"},
          {"enum": ["CORRELATION_CLUSTERING"], "description": "https://en.wikipedia.org/wiki/Correlation_clustering"},
          {"enum": ["CORTICAL_LEARNING"]},
          {"enum": ["COTRAINING"], "description": "https://en.wikipedia.org/wiki/Co-training"},
          {"enum": ["CROSS_ENTROPY"], "description": "https://en.wikipedia.org/wiki/Cross_entropy"},
          {"enum": ["CROSS_ENTROPY_METHOD"], "description": "https://en.wikipedia.org/wiki/Cross-entropy_method"},
          {"enum": ["CROSS_VALIDATION"], "description": "https://en.wikipedia.org/wiki/Cross-validation_(statistics)"},
          {"enum": ["CULTURAL_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Cultural_algorithm"},
          {"enum": ["DATA_CONVERSION"], "description": "https://en.wikipedia.org/wiki/Data_conversion"},
          {"enum": ["DATA_DENORMALIZATION"], "description": "https://en.wikipedia.org/wiki/Denormalization"},
          {"enum": ["DATA_MAPPING"], "description": "https://en.wikipedia.org/wiki/Data_mapping"},
          {"enum": ["DATA_NORMALIZATION"], "description": "https://en.wikipedia.org/wiki/Database_normalization"},
          {"enum": ["DATA_PROFILING"], "description": "https://en.wikipedia.org/wiki/Data_profiling"},
          {"enum": ["DATA_RETRIEVAL"], "description": "Obtaining additional data for augmentation"},
          {"enum": ["DATA_SPLITTING"], "description": "https://en.wikipedia.org/wiki/Training,_test,_and_validation_sets"},
          {"enum": ["DATA_STREAM_CLUSTERING"], "description": "https://en.wikipedia.org/wiki/Data_stream_clustering"},
          {"enum": ["DATA_STREAM_MINING"], "description": "https://en.wikipedia.org/wiki/Data_stream_mining"},
          {"enum": ["DATA_STRUCTURE_ALIGNMENT"], "description": "https://en.wikipedia.org/wiki/Data_structure_alignment"},
          {"enum": ["DBSCAN"], "description": "https://en.wikipedia.org/wiki/DBSCAN"},
          {"enum": ["DECISION_STUMP"], "description": "https://en.wikipedia.org/wiki/Decision_stump"},
          {"enum": ["DECISION_TREE"], "description": "https://en.wikipedia.org/wiki/Decision_tree"},
          {"enum": ["DEEP_BELIEF_NETWORK"], "description": "https://en.wikipedia.org/wiki/Deep_belief_network"},
          {"enum": ["DEEP_FEATURE_SYNTHESIS"], "description": "https://groups.csail.mit.edu/EVO-DesignOpt/groupWebSite/uploads/Site/DSAA_DSM_2015.pdf"},
          {"enum": ["DEEP_NEURAL_NETWORK"], "description": "https://en.wikipedia.org/wiki/Deep_learning#Deep_neural_networks"},
          {"enum": ["DEINTERLACING"], "description": "https://en.wikipedia.org/wiki/Deinterlacing"},
          {"enum": ["DENSE_NEURAL_NETWORK_LAYER"]},
          {"enum": ["DISCRETIZATION"], "description": "https://en.wikipedia.org/wiki/Discretization"},
          {"enum": ["DPLL"], "description": "https://en.wikipedia.org/wiki/DPLL_algorithm"},
          {"enum": ["DROPOUT"], "description": "https://en.wikipedia.org/wiki/Dropout_(neural_networks)"},
          {"enum": ["DYNAMIC_NEURAL_NETWORK"]},
          {"enum": ["DYNAMIC_TIME_WARPING"], "description": "https://en.wikipedia.org/wiki/Dynamic_time_warping"},
          {"enum": ["EAGER_LEARNING"], "description": "https://en.wikipedia.org/wiki/Eager_learning"},
          {"enum": ["ECHO_STATE_NETWORK"], "description": "https://en.wikipedia.org/wiki/Echo_state_network"},
          {"enum": ["ECLAT"]},
          {"enum": ["EDGERANK"], "description": "https://en.wikipedia.org/wiki/EdgeRank"},
          {"enum": ["ELASTIC_NET_REGULARIZATION"], "description": "https://en.wikipedia.org/wiki/Elastic_net_regularization"},
          {"enum": ["ENCODE_BINARY"], "description": "https://en.wikipedia.org/wiki/Binary_code"},
          {"enum": ["ENCODE_ONE_HOT"], "description": "https://en.wikipedia.org/wiki/One-hot"},
          {"enum": ["ENCODE_ORDINAL"]},
          {"enum": ["ENCODE_UNARY"], "description": "https://en.wikipedia.org/wiki/Unary_numeral_system"},
          {"enum": ["EQUI_JOIN"], "description": "https://en.wikipedia.org/wiki/Join_(SQL)#Equi-join"},
          {"enum": ["ENSEMBLE_LEARNING"], "description": "https://en.wikipedia.org/wiki/Ensemble_learning"},
          {"enum": ["EVOLUTIONARY_ACQUISITION_OF_NEURAL_TOPOLOGIES"], "description": "https://en.wikipedia.org/wiki/Evolutionary_acquisition_of_neural_topologies"},
          {"enum": ["EVOLUTIONARY_MULTIMODAL_OPTIMIZATION"], "description": "https://en.wikipedia.org/wiki/Evolutionary_multimodal_optimization"},
          {"enum": ["EXPECTATION_MAXIMIZATION_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Expectation%E2%80%93maximization_algorithm"},
          {"enum": ["EXTENSION_NEURAL_NETWORK"], "description": "https://en.wikipedia.org/wiki/Extension_neural_network"},
          {"enum": ["EXTREME_LEARNING_MACHINE"], "description": "https://en.wikipedia.org/wiki/Extreme_learning_machine"},
          {"enum": ["F1_SCORE"], "description": "https://en.wikipedia.org/wiki/F1_score"},
          {"enum": ["FALSE_NEAREST_NEIGHBOR"], "description": "https://en.wikipedia.org/wiki/False_nearest_neighbor_algorithm"},
          {"enum": ["FASTICA"], "description": "https://en.wikipedia.org/wiki/FastICA"},
          {"enum": ["FEATURE_SCALING"], "description": "https://en.wikipedia.org/wiki/Feature_scaling"},
          {"enum": ["FEEDFORWARD_NEURAL_NETWORK"], "description": "https://en.wikipedia.org/wiki/Feedforward_neural_network"},
          {"enum": ["FELLEGI_SUNTER_ALGORITHM"]},
          {"enum": ["FILE_MANIPULATION"], "description": "https://en.wikipedia.org/wiki/Computer_file"},
          {"enum": ["FISHER_KERNEL"], "description": "https://en.wikipedia.org/wiki/Fisher_kernel"},
          {"enum": ["FLATTEN_NEURAL_NETWORK_LAYER"]},
          {"enum": ["FORWARD_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Forward_algorithm"},
          {"enum": ["FORWARD_BACKWARD_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Forward%E2%80%93backward_algorithm"},
          {"enum": ["FORWARD_DIFFERENCE_CODING"], "description": "https://stats.idre.ucla.edu/r/library/r-library-contrast-coding-systems-for-categorical-variables/#forward"},
          {"enum": ["FRANK_WOLFE_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Frank%E2%80%93Wolfe_algorithm"},
          {"enum": ["FREQUENCY_TRANSFORM"], "description": "https://en.wikipedia.org/wiki/Frequency_domain"},
          {"enum": ["FUZZY_CLUSTERING"], "description": "https://en.wikipedia.org/wiki/Fuzzy_clustering"},
          {"enum": ["GAUSSIAN_BLUR"], "description": "https://en.wikipedia.org/wiki/Gaussian_blur"},
          {"enum": ["GAUSSIAN_PROCESS"], "description": "https://en.wikipedia.org/wiki/Gaussian_process"},
          {"enum": ["GENERALIZED_HEBBIAN_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Generalized_Hebbian_Algorithm"},
          {"enum": ["GENERATIVE_TOPOGRAPHIC_MAP"], "description": "https://en.wikipedia.org/wiki/Generative_topographic_map"},
          {"enum": ["GENETIC_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Genetic_algorithm"},
          {"enum": ["GENETIC_ALGORITHM_FOR_RULE_SET_PRODUCTION"], "description": "https://en.wikipedia.org/wiki/Genetic_Algorithm_for_Rule_Set_Production"},
          {"enum": ["GENETIC_PROGRAMMING"], "description": "https://en.wikipedia.org/wiki/Genetic_programming"},
          {"enum": ["GENETIC_SCALE_RECURRENT_NEURAL_NETWORK"]},
          {"enum": ["GLOVE"], "description": "https://en.wikipedia.org/wiki/GloVe_(machine_learning)"},
          {"enum": ["GRADIENT_BOOSTING"], "description": "https://en.wikipedia.org/wiki/Gradient_boosting"},
          {"enum": ["GRADIENT_DESCENT"], "description": "https://en.wikipedia.org/wiki/Gradient_descent"},
          {"enum": ["GRAPHICAL_LASSO"], "description": "https://en.wikipedia.org/wiki/Graphical_lasso"},
          {"enum": ["GROWING_SELF_ORGANIZING_MAP"], "description": "https://en.wikipedia.org/wiki/Growing_self-organizing_map"},
          {"enum": ["HARD_CLUSTERING"]},
          {"enum": ["HASHING"], "description": "https://en.wikipedia.org/wiki/Hash_function"},
          {"enum": ["HELMERT_CODING"], "description": "https://stats.idre.ucla.edu/r/library/r-library-contrast-coding-systems-for-categorical-variables/#HELMERT"},
          {"enum": ["HEURISTIC"], "description": "https://en.wikipedia.org/wiki/Heuristic"},
          {"enum": ["HIDDEN_MARKOV_MODEL"], "description": "https://en.wikipedia.org/wiki/Hidden_Markov_model"},
          {"enum": ["HIDDEN_SEMI_MARKOV_MODEL"], "description": "https://en.wikipedia.org/wiki/Hidden_semi-Markov_model"},
          {"enum": ["HIERARCHICAL_CLUSTERING"], "description": "https://en.wikipedia.org/wiki/Hierarchical_clustering"},
          {"enum": ["HIERARCHICAL_TEMPORAL_MEMORY"], "description": "https://en.wikipedia.org/wiki/Hierarchical_temporal_memory"},
          {"enum": ["HIGHER_ORDER_SINGULAR_VALUE_DECOMPOSITION"], "description": "https://en.wikipedia.org/wiki/Higher-order_singular_value_decomposition"},
          {"enum": ["HOLDOUT"], "description": "https://en.wikipedia.org/wiki/Cross-validation_(statistics)#Holdout_method"},
          {"enum": ["HOLOGRAPHIC_ASSOCIATIVE_MEMORY"], "description": "https://en.wikipedia.org/wiki/Holographic_associative_memory"},
          {"enum": ["HOPFIELD_NETWORK"], "description": "https://en.wikipedia.org/wiki/Hopfield_network"},
          {"enum": ["HOSHEN_KOPELMAN_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Hoshen%E2%80%93Kopelman_algorithm"},
          {"enum": ["HYPER_BASIS_FUNCTION_NETWORK"], "description": "https://en.wikipedia.org/wiki/Hyper_basis_function_network"},
          {"enum": ["HYPERNEAT"], "description": "https://en.wikipedia.org/wiki/HyperNEAT"},
          {"enum": ["ID3"], "description": "https://en.wikipedia.org/wiki/ID3"},
          {"enum": ["IDENTITY_FUNCTION"], "description": "https://en.wikipedia.org/wiki/Identity_function"},
          {"enum": ["IMAGE_CROPPING"], "description": "https://en.wikipedia.org/wiki/Cropping_(image)"},
          {"enum": ["IMAGE_PADDING"]},
          {"enum": ["IMAGE_ROTATION"]},
          {"enum": ["IMAGE_SCALING"], "description": "https://en.wikipedia.org/wiki/Image_scaling"},
          {"enum": ["IMAGE_TRANSFORM"]},
          {"enum": ["IMAGENET"], "description": "https://en.wikipedia.org/wiki/ImageNet"},
          {"enum": ["IMPUTATION"], "description": "https://en.wikipedia.org/wiki/Imputation_(statistics)"},
          {"enum": ["INDEPENDENT_COMPONENT_ANALYSIS"], "description": "https://en.wikipedia.org/wiki/Independent_component_analysis"},
          {"enum": ["INFORMATION_ENTROPY"], "description": "https://en.wikipedia.org/wiki/Entropy_(information_theory)"},
          {"enum": ["INFORMATION_FUZZY_NETWORKS"], "description": "https://en.wikipedia.org/wiki/Information_fuzzy_networks"},
          {"enum": ["INFORMATION_THEORETIC_METAFEATURE_EXTRACTION"]},
          {"enum": ["INSTANCE_BASED_LEARNING"], "description": "https://en.wikipedia.org/wiki/Instance-based_learning"},
          {"enum": ["INSTANTANEOUSLY_TRAINED_NEURAL_NETWORKS"], "description": "https://en.wikipedia.org/wiki/Instantaneously_trained_neural_networks"},
          {"enum": ["ISOMAP"], "description": "https://en.wikipedia.org/wiki/Isomap"},
          {"enum": ["ITERATIVE_LABELING"], "description": "Algorithms iteratively label unlabeled examples for semi-supervised learning."},
          {"enum": ["IVECTOR_EXTRACTION"], "description": "I-vector extration. Dehak, Najim & Kenny, Patrick & Dehak, R & Dumouchel, Pierre & Ouellet, Pierre. (2011). Front-End Factor Analysis for Speaker Verification. Audio, Speech, and Language Processing, IEEE Transactions on. 19. 788 - 798. 10.1109/TASL.2010.2064307."},
          {"enum": ["JACCARD_INDEX"], "description": "https://en.wikipedia.org/wiki/Jaccard_index"},
          {"enum": ["JUNCTION_TREE_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Junction_tree_algorithm"},
          {"enum": ["K_FOLD"], "description": "https://en.wikipedia.org/wiki/Cross-validation_(statistics)#k-fold_cross-validation"},
          {"enum": ["K_MEANS_CLUSTERING"], "description": "https://en.wikipedia.org/wiki/K-means_clustering"},
          {"enum": ["K_MEANS_PLUS_PLUS"], "description": "https://en.wikipedia.org/wiki/K-means%2B%2B"},
          {"enum": ["K_NEAREST_NEIGHBORS"], "description": "https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm"},
          {"enum": ["K_Q_FLATS"], "description": "https://en.wikipedia.org/wiki/K_q-flats"},
          {"enum": ["K_SVD"], "description": "https://en.wikipedia.org/wiki/K-SVD"},
          {"enum": ["KERNEL_ADAPTIVE_FILTER"], "description": "https://en.wikipedia.org/wiki/Kernel_adaptive_filter"},
          {"enum": ["KERNEL_INDEPENDENT_COMPONENT_ANALYSIS"], "description": "https://en.wikipedia.org/wiki/Kernel-independent_component_analysis"},
          {"enum": ["KERNEL_METHOD"], "description": "https://en.wikipedia.org/wiki/Kernel_method"},
          {"enum": ["KERNEL_PERCEPTRON"], "description": "https://en.wikipedia.org/wiki/Kernel_perceptron"},
          {"enum": ["KERNEL_PRINCIPAL_COMPONENT_ANALYSIS"], "description": "https://en.wikipedia.org/wiki/Kernel_principal_component_analysis"},
          {"enum": ["KERNEL_RANDOM_FOREST"], "description": "https://en.wikipedia.org/wiki/Random_forest#Kernel_random_forest"},
          {"enum": ["LANDMARKING_METAFEATURE_EXTRACTION"]},
          {"enum": ["LARGE_MARGIN_NEAREST_NEIGHBOR"], "description": "https://en.wikipedia.org/wiki/Large_margin_nearest_neighbor"},
          {"enum": ["LASSO"], "description": "https://en.wikipedia.org/wiki/Lasso_(statistics)"},
          {"enum": ["LATENT_DIRICHLET_ALLOCATION"], "description": "https://en.wikipedia.org/wiki/Latent_Dirichlet_allocation"},
          {"enum": ["LATENT_SEMANTIC_ANALYSIS"], "description": "https://en.wikipedia.org/wiki/Latent_semantic_analysis"},
          {"enum": ["LEARNING_USING_PRIVILEGED_INFORMATION"], "description": "Algorithm can leverage privileged information available in training data but absent in test data."},
          {"enum": ["LEARNING_VECTOR_QUANTIZATION"], "description": "https://en.wikipedia.org/wiki/Learning_vector_quantization"},
          {"enum": ["LEAST_SQUARES_SUPPORT_VECTOR_MACHINE"], "description": "https://en.wikipedia.org/wiki/Least_squares_support_vector_machine"},
          {"enum": ["LEAVE_ONE_OUT"], "description": "https://en.wikipedia.org/wiki/Cross-validation_(statistics)#Leave-one-out_cross-validation"},
          {"enum": ["LIGHTGBM"]},
          {"enum": ["LIMITED_MEMORY_BFGS"], "description": "https://en.wikipedia.org/wiki/Limited-memory_BFGS"},
          {"enum": ["LINDE_BUZO_GRAY_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Linde%E2%80%93Buzo%E2%80%93Gray_algorithm"},
          {"enum": ["LINEAR_DISCRIMINANT_ANALYSIS"], "description": "https://en.wikipedia.org/wiki/Linear_discriminant_analysis"},
          {"enum": ["LINEAR_FILTER"], "description": "https://en.wikipedia.org/wiki/Linear_filter"},
          {"enum": ["LINEAR_REGRESSION"], "description": "https://en.wikipedia.org/wiki/Linear_regression"},
          {"enum": ["LOBPCG"], "description": "https://en.wikipedia.org/wiki/LOBPCG"},
          {"enum": ["LOCAL_OUTLIER_FACTOR"], "description": "https://en.wikipedia.org/wiki/Local_outlier_factor"},
          {"enum": ["LOCAL_SEARCH"], "description": "https://en.wikipedia.org/wiki/Local_search_(optimization)"},
          {"enum": ["LOGISTIC_MODEL_TREE"], "description": "https://en.wikipedia.org/wiki/Logistic_model_tree"},
          {"enum": ["LOGISTIC_REGRESSION"], "description": "https://en.wikipedia.org/wiki/Logistic_regression"},
          {"enum": ["LOGITBOOST"], "description": "https://en.wikipedia.org/wiki/LogitBoost"},
          {"enum": ["LONG_SHORT_TERM_MEMORY"], "description": "https://en.wikipedia.org/wiki/Long_short-term_memory"},
          {"enum": ["LOW_RANK_MATRIX_APPROXIMATIONS"], "description": "https://en.wikipedia.org/wiki/Low-rank_matrix_approximations"},
          {"enum": ["LPBOOST"], "description": "https://en.wikipedia.org/wiki/LPBoost"},
          {"enum": ["MAP"], "description": "https://en.wikipedia.org/wiki/Map_(higher-order_function)"},
          {"enum": ["MARGIN_CLASSIFIER"], "description": "https://en.wikipedia.org/wiki/Margin_classifier"},
          {"enum": ["MARGIN_INFUSED_RELAXED_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Margin-infused_relaxed_algorithm"},
          {"enum": ["MARKOV_CHAIN"], "description": "https://en.wikipedia.org/wiki/Markov_chain"},
          {"enum": ["MARKOV_CHAIN_MONTE_CARLO"], "description": "https://en.wikipedia.org/wiki/Markov_chain_Monte_Carlo"},
          {"enum": ["MARKOV_DECISION_PROCESS"], "description": "https://en.wikipedia.org/wiki/Markov_decision_process"},
          {"enum": ["MARKOV_LOGIC_NETWORK"], "description": "https://en.wikipedia.org/wiki/Markov_logic_network"},
          {"enum": ["MARKOV_MODEL"], "description": "https://en.wikipedia.org/wiki/Markov_model"},
          {"enum": ["MARKOV_RANDOM_FIELD"], "description": "https://en.wikipedia.org/wiki/Markov_random_field"},
          {"enum": ["MAX_POOLING_NEURAL_NETWORK_LAYER"]},
          {"enum": ["MEAN_ABSOLUTE_ERROR"], "description": "https://en.wikipedia.org/wiki/Mean_absolute_error"},
          {"enum": ["MEAN_SHIFT"], "description": "https://en.wikipedia.org/wiki/Mean_shift"},
          {"enum": ["MEAN_SQUARED_ERROR"], "description": " https://en.wikipedia.org/wiki/Mean_squared_error"},
          {"enum": ["MEMETIC_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Memetic_algorithm"},
          {"enum": ["MEMORY_PREDICTION_FRAMEWORK"], "description": "https://en.wikipedia.org/wiki/Memory-prediction_framework"},
          {"enum": ["MERSENNE_TWISTER"], "description": "https://en.wikipedia.org/wiki/Mersenne_Twister"},
          {"enum": ["MFCC_FEATURE_EXTRACTION"], "description": "The HTK Book, http://www.dsic.upv.es/docs/posgrado/20/RES/materialesDocentes/alejandroViewgraphs/htkbook.pdf"},
          {"enum": ["MIN_CONFLICTS_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Min-conflicts_algorithm"},
          {"enum": ["MINIMUM_REDUNDANCY_FEATURE_SELECTION"], "description": "https://en.wikipedia.org/wiki/Minimum_redundancy_feature_selection"},
          {"enum": ["MINMAX_SCALER"]},
          {"enum": ["MM_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/MM_algorithm"},
          {"enum": ["MODEL_BASED_METAFEATURE_EXTRACTION"]},
          {"enum": ["MODULAR_NEURAL_NETWORK"], "description": "https://en.wikipedia.org/wiki/Modular_neural_network"},
          {"enum": ["MOMENTUM_CONTRAST"], "description": "Momentum Contrast for Unsupervised Visual Representation Learning, https://arxiv.org/pdf/1911.05722.pdf, He et al. FAIR"},
          {"enum": ["MONTE_CARLO_TREE_SEARCH"], "description": "https://en.wikipedia.org/wiki/Monte_Carlo_tree_search"},
          {"enum": ["MORAVEC_CORNER_DETECTION_ALGORITHM"]},
          {"enum": ["MOTION_COMPENSATION"], "description": "https://en.wikipedia.org/wiki/Motion_compensation"},
          {"enum": ["MULTI_ARMED_BANDIT"], "description": "https://en.wikipedia.org/wiki/Multi-armed_bandit"},
          {"enum": ["MULTICLASS_CLASSIFICATION"], "description": "https://en.wikipedia.org/wiki/Multiclass_classification"},
          {"enum": ["MULTILABEL_CLASSIFICATION"], "description": "https://en.wikipedia.org/wiki/Multi-label_classification"},
          {"enum": ["MULTILAYER_PERCEPTRON"], "description": "https://en.wikipedia.org/wiki/Multilayer_perceptron"},
          {"enum": ["MULTINOMIAL_LOGISTIC_REGRESSION"], "description": "https://en.wikipedia.org/wiki/Multinomial_logistic_regression"},
          {"enum": ["MULTINOMIAL_NAIVE_BAYES"], "description": "http://scikit-learn.org/stable/modules/naive_bayes.html#multinomial-naive-bayes, https://nlp.stanford.edu/IR-book/html/htmledition/naive-bayes-text-classification-1.html"},
          {"enum": ["MULTIPLICATIVE_WEIGHT_UPDATE_METHOD"], "description": "https://en.wikipedia.org/wiki/Multiplicative_weight_update_method"},
          {"enum": ["MULTIVARIATE_REGRESSION"], "description": "https://en.wikipedia.org/wiki/Multi-label_classification"},
          {"enum": ["MUTUAL_INFORMATION"], "description": "https://en.wikipedia.org/wiki/Mutual_information"},
          {"enum": ["N_GRAM"], "description": "https://en.wikipedia.org/wiki/N-gram"},
          {"enum": ["NAIVE_BAYES_CLASSIFIER"], "description": "https://en.wikipedia.org/wiki/Naive_Bayes_classifier"},
          {"enum": ["NEAREST_CENTROID_CLASSIFIER"], "description": "https://en.wikipedia.org/wiki/Nearest_centroid_classifier"},
          {"enum": ["NEIGHBOURHOOD_COMPONENTS_ANALYSIS"], "description": "https://en.wikipedia.org/wiki/Neighbourhood_components_analysis"},
          {"enum": ["NEURAL_NETWORK_BACKPROPAGATION"], "description": "https://en.wikipedia.org/wiki/Backpropagation"},
          {"enum": ["NEURO_FUZZY_NETWORK"], "description": "https://en.wikipedia.org/wiki/Neuro-fuzzy"},
          {"enum": ["NEUROEVOLUTION_OF_AUGMENTED_TOPOLOGIES"], "description": "https://en.wikipedia.org/wiki/Neuroevolution_of_augmenting_topologies"},
          {"enum": ["NOISE_REDUCTION"], "description": "https://en.wikipedia.org/wiki/Noise_reduction"},
          {"enum": ["NONOVERLAPPING_COMMUNITY_DETECTION"]},
          {"enum": ["NORMAL_DISTRIBUTION"], "description": "https://en.wikipedia.org/wiki/Normal_distribution"},
          {"enum": ["NUMERICAL_METHOD"], "description": "https://en.wikipedia.org/wiki/Numerical_method"},
          {"enum": ["ONE_RULE"]},
          {"enum": ["ONE_SHOT_ASSOCIATIVE_MEMORY"]},
          {"enum": ["ONE_SHOT_LEARNING"], "description": "https://en.wikipedia.org/wiki/One-shot_learning"},
          {"enum": ["OPTICS_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/OPTICS_algorithm"},
          {"enum": ["OPTIMISTIC_KNOWLEDGE_GRADIENT"], "description": "https://en.wikipedia.org/wiki/Optimistic_knowledge_gradient"},
          {"enum": ["ORTHOGONAL_POLYNOMIAL_CODING"], "description": "https://stats.idre.ucla.edu/r/library/r-library-contrast-coding-systems-for-categorical-variables/#ORTHOGONAL"},
          {"enum": ["OVERLAPPING_CLUSTERING"]},
          {"enum": ["OVERLAPPING_COMMUNITY_DETECTION"]},
          {"enum": ["PACHINKO_ALLOCATION"], "description": "https://en.wikipedia.org/wiki/Pachinko_allocation"},
          {"enum": ["PAGERANK"], "description": "https://en.wikipedia.org/wiki/PageRank"},
          {"enum": ["PARAMETRIC_TRAJECTORY_MODELING"], "description": "Gish, H. and Ng, K., 1996, October. Parametric trajectory models for speech recognition. In Spoken Language, 1996. ICSLP 96. Proceedings., Fourth International Conference on (Vol. 1, pp. 466-469). IEEE."},
          {"enum": ["PARTIAL_LEAST_SQUARES_REGRESSION"], "description": "https://en.wikipedia.org/wiki/Partial_least_squares_regression"},
          {"enum": ["PARTICLE_SWARM_OPTIMIZATION"], "description": "https://en.wikipedia.org/wiki/Particle_swarm_optimization"},
          {"enum": ["PASSIVE_AGGRESSIVE"], "description": "http://jmlr.csail.mit.edu/papers/volume7/crammer06a/crammer06a.pdf"},
          {"enum": ["PERCEPTRON"], "description": "https://en.wikipedia.org/wiki/Perceptron"},
          {"enum": ["PHYSICAL_NEURAL_NETWORK"], "description": "https://en.wikipedia.org/wiki/Physical_neural_network"},
          {"enum": ["PIXELATION"], "description": "https://en.wikipedia.org/wiki/Pixelation"},
          {"enum": ["POLYNOMIAL_NEURAL_NETWORK"]},
          {"enum": ["POLYNOMIAL_REGRESSION"], "description": "https://en.wikipedia.org/wiki/Polynomial_regression"},
          {"enum": ["POPULATION_BASED_INCREMENTAL_LEARNING"], "description": "https://en.wikipedia.org/wiki/Population-based_incremental_learning"},
          {"enum": ["PREFRONTAL_CORTEX_BASAL_GANGLIA_WORKING_MEMORY"], "description": "https://en.wikipedia.org/wiki/Prefrontal_cortex_basal_ganglia_working_memory"},
          {"enum": ["PRINCIPAL_COMPONENT_ANALYSIS"], "description": "https://en.wikipedia.org/wiki/Principal_component_analysis"},
          {"enum": ["PROBABILISTIC_DATA_CLEANING"]},
          {"enum": ["PROBABILISTIC_LATENT_SEMANTIC_ANALYSIS"], "description": "https://en.wikipedia.org/wiki/Probabilistic_latent_semantic_analysis"},
          {"enum": ["PROBABILISTIC_NEURAL_NETWORK"], "description": "https://en.wikipedia.org/wiki/Probabilistic_neural_network"},
          {"enum": ["PRUNING"], "description": "https://en.wikipedia.org/wiki/Pruning_(decision_trees)"},
          {"enum": ["PSIPRED"], "description": "https://en.wikipedia.org/wiki/PSIPRED"},
          {"enum": ["Q_LEARNING"], "description": "https://en.wikipedia.org/wiki/Q-learning"},
          {"enum": ["QUADRATIC_DISCRIMINANT_ANALYSIS"], "description": "https://en.wikipedia.org/wiki/Quadratic_classifier#Quadratic_discriminant_analysis"},
          {"enum": ["QUANTUM_NEURAL_NETWORK"], "description": "https://en.wikipedia.org/wiki/Quantum_neural_network"},
          {"enum": ["QUICKPROP"], "description": "https://en.wikipedia.org/wiki/Quickprop"},
          {"enum": ["RADIAL_BASIS_FUNCTION_NETWORK"], "description": "https://en.wikipedia.org/wiki/Radial_basis_function_network"},
          {"enum": ["RANDOM_FOREST"], "description": "https://en.wikipedia.org/wiki/Random_forest"},
          {"enum": ["RANDOM_GRAPH"], "description": "https://en.wikipedia.org/wiki/Random_graph"},
          {"enum": ["RANDOM_PROJECTION"], "description": "https://en.wikipedia.org/wiki/Random_projection"},
          {"enum": ["RANDOM_SUBSPACE_METHOD"], "description": "https://en.wikipedia.org/wiki/Random_subspace_method"},
          {"enum": ["RANDOM_WALK"], "description": "https://en.wikipedia.org/wiki/Random_walk"},
          {"enum": ["RANDOMIZED_WEIGHTED_MAJORITY_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Randomized_weighted_majority_algorithm"},
          {"enum": ["RANKBRAIN"], "description": "https://en.wikipedia.org/wiki/RankBrain"},
          {"enum": ["RANKING_SVM"], "description": "https://en.wikipedia.org/wiki/Ranking_SVM"},
          {"enum": ["RAPIDLY_EXPLORING_RANDOM_TREE"], "description": "https://en.wikipedia.org/wiki/Rapidly-exploring_random_tree"},
          {"enum": ["RECEIVER_OPERATING_CHARACTERISTIC"], "description": "https://en.wikipedia.org/wiki/Receiver_operating_characteristic"},
          {"enum": ["RECURRENT_NEURAL_NETWORK"], "description": "https://en.wikipedia.org/wiki/Recurrent_neural_network"},
          {"enum": ["RECURSIVE_LEAST_SQUARES"], "description": "https://en.wikipedia.org/wiki/Recursive_least_squares_filter"},
          {"enum": ["RECURSIVE_PARTITIONING"], "description": "https://en.wikipedia.org/wiki/Recursive_partitioning"},
          {"enum": ["REGULARIZATION_BY_SPECTRAL_FILTERING"], "description": "https://en.wikipedia.org/wiki/Regularization_by_spectral_filtering"},
          {"enum": ["REGULARIZED_LEAST_SQUARES"], "description": "https://en.wikipedia.org/wiki/Regularized_least_squares"},
          {"enum": ["REGULATORY_FEEDBACK_NETWORK"], "description": "https://en.wikipedia.org/wiki/Regulatory_feedback_network"},
          {"enum": ["REINFORCE_ALGORITHM"]},
          {"enum": ["REJECTION_SAMPLING"], "description": "https://en.wikipedia.org/wiki/Rejection_sampling"},
          {"enum": ["RELATIONAL_ALGEBRA"], "description": "https://en.wikipedia.org/wiki/Relational_algebra"},
          {"enum": ["RELATIONAL_DATA_MINING"], "description": "https://en.wikipedia.org/wiki/Relational_data_mining"},
          {"enum": ["RELIEF"], "description": "https://en.wikipedia.org/wiki/Relief_(feature_selection)"},
          {"enum": ["RESTRICTED_BOLTZMANN_MACHINE"], "description": "https://en.wikipedia.org/wiki/Restricted_Boltzmann_machine"},
          {"enum": ["RETINANET"], "description": "https://arxiv.org/abs/1708.02002"},
          {"enum": ["REVERSE_HELMERT_CODING"], "description": "https://stats.idre.ucla.edu/r/library/r-library-contrast-coding-systems-for-categorical-variables/#reverse"},
          {"enum": ["REVERSE_MONTE_CARLO"], "description": "https://en.wikipedia.org/wiki/Reverse_Monte_Carlo"},
          {"enum": ["RIPPER"], "description": "https://en.wikipedia.org/wiki/Repeated_incremental_pruning_to_produce_error_reduction_(RIPPER)"},
          {"enum": ["ROBUST_PRINCIPAL_COMPONENT_ANALYSIS"], "description": "https://en.wikipedia.org/wiki/Robust_principal_component_analysis"},
          {"enum": ["RPROP"], "description": "https://en.wikipedia.org/wiki/Rprop"},
          {"enum": ["RULE_BASED_MACHINE_LEARNING"], "description": "https://en.wikipedia.org/wiki/Rule-based_machine_learning"},
          {"enum": ["SAMPLE_MERGING"]},
          {"enum": ["SAMPLE_SELECTION"]},
          {"enum": ["SELF_ORGANIZING_MAP"], "description": "https://en.wikipedia.org/wiki/Self-organizing_map"},
          {"enum": ["SEMIDEFINITE_EMBEDDING"], "description": "https://en.wikipedia.org/wiki/Semidefinite_embedding"},
          {"enum": ["SIGNAL_DITHERING"], "description": "https://en.wikipedia.org/wiki/Dither"},
          {"enum": ["SIGNAL_ENERGY"], "description": "https://en.wikipedia.org/wiki/Energy_(signal_processing)"},
          {"enum": ["SIGNAL_TO_NOISE_RATIO"], "description": "https://en.wikipedia.org/wiki/Signal-to-noise_ratio"},
          {"enum": ["SIMULATED_ANNEALING"], "description": "https://en.wikipedia.org/wiki/Simulated_annealing"},
          {"enum": ["SINGULAR_VALUE_DECOMPOSITION"], "description": "https://en.wikipedia.org/wiki/Singular-value_decomposition"},
          {"enum": ["SMOOTHED_ANALYSIS"], "description": "https://en.wikipedia.org/wiki/Smoothed_analysis"},
          {"enum": ["SOFT_CLUSTERING"], "description": "https://en.wikipedia.org/wiki/Fuzzy_clustering"},
          {"enum": ["SOFTMAX_FUNCTION"], "description": "https://en.wikipedia.org/wiki/Softmax_function"},
          {"enum": ["SPARSE_DICTIONARY_LEARNING"], "description": "https://en.wikipedia.org/wiki/Sparse_dictionary_learning"},
          {"enum": ["SPARSE_PCA"], "description": "https://en.wikipedia.org/wiki/Sparse_PCA"},
          {"enum": ["SPECTRAL_CLUSTERING"], "description": "https://en.wikipedia.org/wiki/Spectral_clustering"},
          {"enum": ["SPIKE_AND_SLAB_VARIABLE_SELECTION"], "description": "https://en.wikipedia.org/wiki/Spike-and-slab_variable_selection"},
          {"enum": ["SPIKING_NEURAL_NETWORKS"], "description": "https://en.wikipedia.org/wiki/Spiking_neural_network"},
          {"enum": ["SPRUCE"], "description": "https://gitlab.com/zinkov/spruce/blob/master/README.md"},
          {"enum": ["STATISTICAL_METAFEATURE_EXTRACTION"]},
          {"enum": ["STATISTICAL_MOMENT_ANALYSIS"], "description": "https://en.wikipedia.org/wiki/Moment_(mathematics)"},
          {"enum": ["STOCHASTIC_CHAINS_WITH_MEMORY_OF_VARIABLE_LENGTH"], "description": "https://en.wikipedia.org/wiki/Stochastic_chains_with_memory_of_variable_length"},
          {"enum": ["STOCHASTIC_GRADIENT_DESCENT"], "description": "https://en.wikipedia.org/wiki/Stochastic_gradient_descent"},
          {"enum": ["STOCHASTIC_NEURAL_NETWORK"], "description": "https://en.wikipedia.org/wiki/Stochastic_neural_network"},
          {"enum": ["STRICT_PARTITIONING_CLUSTERING"]},
          {"enum": ["STRICT_PARTITIONING_CLUSTERING_WITH_OUTLIERS"]},
          {"enum": ["STRUCTURED_KNN"], "description": "https://en.wikipedia.org/wiki/Structured_kNN"},
          {"enum": ["STRUCTURED_SPARSITY_REGULARIZATION"], "description": "https://en.wikipedia.org/wiki/Structured_sparsity_regularization"},
          {"enum": ["STRUCTURED_SUPPORT_VECTOR_MACHINE"], "description": "https://en.wikipedia.org/wiki/Structured_support_vector_machine"},
          {"enum": ["SUBSPACE_CLUSTERING"], "description": "https://en.wikipedia.org/wiki/Clustering_high-dimensional_data#Subspace_clustering"},
          {"enum": ["SUM_CODING"]},
          {"enum": ["SUPER_RECURSIVE_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Super-recursive_algorithm"},
          {"enum": ["SUPPORT_VECTOR_MACHINE"], "description": "https://en.wikipedia.org/wiki/Support_vector_machine"},
          {"enum": ["SYMBOLIC_REGRESSION"], "description": "https://en.wikipedia.org/wiki/Symbolic_regression"},
          {"enum": ["T_DISTRIBUTED_STOCHASTIC_NEIGHBOR_EMBEDDING"], "description": "https://en.wikipedia.org/wiki/T-distributed_stochastic_neighbor_embedding"},
          {"enum": ["TFIDF"], "description": "https://en.wikipedia.org/wiki/Tf-idf"},
          {"enum": ["TIKHONOV_REGULARIZATION"], "description": "https://en.wikipedia.org/wiki/Tikhonov_regularization"},
          {"enum": ["TIME_DELAY_NEURAL_NETWORK"], "description": "https://en.wikipedia.org/wiki/Time_delay_neural_network"},
          {"enum": ["TRUNCATED_NEWTON_METHOD"], "description": "https://en.wikipedia.org/wiki/Truncated_Newton_method"},
          {"enum": ["TRUNCATED_NORMAL_DISTRIBUTION"], "description": "https://en.wikipedia.org/wiki/Truncated_normal_distribution"},
          {"enum": ["UNIFORM_DISTRIBUTION"], "description": "https://en.wikipedia.org/wiki/Uniform_distribution_(continuous)"},
          {"enum": ["UNIFORM_TIME_SERIES_SEGMENTATION"], "description": "Time-series segmentation into fixed-sized segments (windows, frames)"},
          {"enum": ["UNIT_WEIGHTED_REGRESSION"], "description": "https://en.wikipedia.org/wiki/Unit-weighted_regression"},
          {"enum": ["UNIVARIATE_REGRESSION"], "description": "https://en.wikipedia.org/wiki/Multi-label_classification"},
          {"enum": ["UNIVERSAL_PORTFOLIO_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Universal_portfolio_algorithm"},
          {"enum": ["VARIABLE_ORDER_MARKOV_MODEL"], "description": "https://en.wikipedia.org/wiki/Variable-order_Markov_model"},
          {"enum": ["VARIATIONAL_BAYESIAN_METHODS"], "description": "https://en.wikipedia.org/wiki/Variational_Bayesian_methods"},
          {"enum": ["VARIATIONAL_MESSAGE_PASSING"], "description": "https://en.wikipedia.org/wiki/Variational_message_passing"},
          {"enum": ["VECTOR_AUTOREGRESSION"], "description": "https://en.wikipedia.org/wiki/Vector_autoregression"},
          {"enum": ["VECTOR_QUANTIZATION"], "description": "https://en.wikipedia.org/wiki/Vector_quantization"},
          {"enum": ["VECTORIZATION"], "description": "https://en.wikipedia.org/wiki/Vectorization"},
          {"enum": ["VERSION_SPACE_LEARNING"], "description": "https://en.wikipedia.org/wiki/Version_space_learning"},
          {"enum": ["WAKE_SLEEP_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Wake-sleep_algorithm"},
          {"enum": ["WEIGHTED_MAJORITY_ALGORITHM"], "description": "https://en.wikipedia.org/wiki/Weighted_majority_algorithm_(machine_learning)"},
          {"enum": ["WINNOW"], "description": "https://en.wikipedia.org/wiki/Winnow_(algorithm)"},
          {"enum": ["WORD2VEC"], "description": "https://en.wikipedia.org/wiki/Word2vec"}
        ]
      },
      "minItems": 1
    },
    "primitive_family": {
      "description": "Primitive family describes the high-level purpose/nature of the primitive. Only one value per primitive is possible. Consider splitting a primitive into multiple primitives if this represents a problem for you.",
      "oneOf": [
        {"enum": ["CLASSIFICATION"], "description": "https://en.wikipedia.org/wiki/Statistical_classification"},
        {"enum": ["CLUSTERING"], "description": "https://en.wikipedia.org/wiki/Cluster_analysis"},
        {"enum": ["COLLABORATIVE_FILTERING"], "description": "https://en.wikipedia.org/wiki/Collaborative_filtering"},
        {"enum": ["COMMUNITY_DETECTION"], "description": "https://en.wikipedia.org/wiki/Community_search"},
        {"enum": ["DATA_AUGMENTATION"], "description": "Adding value to base data by adding information derived from internal and external sources."},
        {"enum": ["DATA_CLEANING"], "description": "https://en.wikipedia.org/wiki/Data_cleansing"},
        {"enum": ["DATA_COMPRESSION"], "description": "https://en.wikipedia.org/wiki/Data_compression"},
        {"enum": ["DATA_GENERATION"], "description": "https://en.wikipedia.org/wiki/Data_generating_process"},
        {"enum": ["DATA_PREPROCESSING"], "description": "https://en.wikipedia.org/wiki/Data_pre-processing"},
        {"enum": ["DATA_TRANSFORMATION"], "description": "https://en.wikipedia.org/wiki/Data_transformation"},
        {"enum": ["DATA_VALIDATION"], "description": "https://en.wikipedia.org/wiki/Data_validation"},
        {"enum": ["DIGITAL_IMAGE_PROCESSING"], "description": "https://en.wikipedia.org/wiki/Digital_image_processing"},
        {"enum": ["DIGITAL_SIGNAL_PROCESSING"], "description": "https://en.wikipedia.org/wiki/Digital_signal_processing"},
        {"enum": ["DIMENSIONALITY_REDUCTION"], "description": "https://en.wikipedia.org/wiki/Dimensionality_reduction"},
        {"enum": ["EVALUATION"], "description": "Primitives providing validation/evaluation, like cross-validation."},
        {"enum": ["FEATURE_CONSTRUCTION"], "description": "A primitive which creates new features."},
        {"enum": ["FEATURE_EXTRACTION"], "description": "https://en.wikipedia.org/wiki/Feature_extraction"},
        {"enum": ["FEATURE_SELECTION"], "description": "https://en.wikipedia.org/wiki/Feature_selection"},
        {"enum": ["GRAPH_CLUSTERING"]},
        {"enum": ["GRAPH_MATCHING"], "description": "https://en.wikipedia.org/wiki/Graph_matching"},
        {"enum": ["LAYER"], "description": "A primitive which is a neural network layer used in construction of a neural network."},
        {"enum": ["LEARNER"], "description": "A primitive which is a learner/model."},
        {"enum": ["LINK_PREDICTION"]},
        {"enum": ["LOSS_FUNCTION"], "description": "Primitives can take a loss function as an argument. This family of primitives provide such loss functions and they can be passed as an argument to other primitives."},
        {"enum": ["METALEARNING"], "description": "https://en.wikipedia.org/wiki/Meta_learning_(computer_science)"},
        {"enum": ["NATURAL_LANGUAGE_PROCESSING"], "description": "https://en.wikipedia.org/wiki/Natural_language_processing"},
        {"enum": ["NORMALIZATION"]},
        {"enum": ["OBJECT_DETECTION"], "description": "https://en.wikipedia.org/wiki/Object_detection"},
        {"enum": ["OPERATOR"], "description": "A simple mathematical operator."},
        {"enum": ["REGRESSION"], "description": "A primitive which can be used to address regression problems."},
        {"enum": ["SEMISUPERVISED_CLASSIFICATION"]},
        {"enum": ["SEMISUPERVISED_REGRESSION"]},
        {"enum": ["SIMILARITY_MODELING"], "description": "A primitive which attempts to learn or infer a measure of similarity or dissimilarity between pairs of instances."},
        {"enum": ["TIME_SERIES_CLASSIFICATION"], "description": "A primitive which can be used to address classification problems of time-series."},
        {"enum": ["TIME_SERIES_EMBEDDING"], "description": "A fixed-length representation of variable-length time series." },
        {"enum": ["TIME_SERIES_FORECASTING"]},
        {"enum": ["TIME_SERIES_SEGMENTATION"], "description": "A primitive which segments an input time-series into a sequence of discrete segments in order to reveal the underlying properties of its source. https://en.wikipedia.org/wiki/Time-series_segmentation."},
        {"enum": ["VERTEX_CLASSIFICATION"]},
        {"enum": ["VERTEX_NOMINATION"]},
        {"enum": ["VIDEO_PROCESSING"], "description": "https://en.wikipedia.org/wiki/Video_processing"},
        {"enum": ["SCHEMA_DISCOVERY"]},
        {"enum": ["REMOTE_SENSING"]}
      ]
    },
    "preconditions": {
      "type": "array",
      "description": "A set of requirements for the data given as an input to this primitive. For example, a primitive may not be able to handle data with missing values.",
      "items": {
        "oneOf": [
          {"enum": ["NO_MISSING_VALUES"], "description": "The primitive cannot handle missing values."},
          {"enum": ["NO_CATEGORICAL_VALUES"], "description": "The primitive cannot handle categorical values."},
          {"enum": ["NO_NEGATIVE_VALUES"], "description": "The primitive cannot handle negative values."},
          {"enum": ["NO_CONTINUOUS_VALUES"], "description": "The primitive cannot handle continuous values."},
          {"enum": ["NO_JAGGED_VALUES"], "description": "The primitive cannot handle values where different elements of data have different dimensions. Both numpy arrays and pandas support only fixed dimension sizes, but a list of lists could have some sub-lists of a different length to others, or a numpy array of objects where objects are numpy arrays of different sizes."},
          {"enum": ["NO_NESTED_VALUES"], "description": "The primitive cannot handle values where a container value contains nested other values with dimensions. E.g., a Pandas DataFrame having numpy arrays as values. Not just container types have dimensions."}
        ]
      },
      "minItems": 1
    },
    "effects": {
      "type": "array",
      "description": "A set of postconditions obtained by the data processed by this primitive. For example, a primitive may remove missing values.",
      "items": {
        "oneOf":[
          {"enum": ["NO_MISSING_VALUES"], "description": "The primitive removes missing values (e.g., imputation)."},
          {"enum": ["NO_CATEGORICAL_VALUES"], "description": "The primitive removes categorical columns (e.g., label encoder)."},
          {"enum": ["NO_NEGATIVE_VALUES"], "description": "The primitive produces only non-negative values."},
          {"enum": ["NO_CONTINUOUS_VALUES"], "description": "The data produced by this primitive is discretized."},
          {"enum": ["NO_JAGGED_VALUES"], "description": "The primitive produces values with fixed dimension sizes across all elements."},
          {"enum": ["NO_NESTED_VALUES"], "description": "The primitive produces values where a container value does not contain nested any other values with dimensions."}
        ]
      },
      "minItems": 1
    },
    "hyperparams_to_tune": {
      "type": "array",
      "description": "A list containing the significant hyper-parameter names of a primitive that should be tuned (for prioritizing hyper-parameter tuning). For instance, if a primitive has 10 hyper-parameters, this metadata may be used to specify the two or three that affect the results the most.",
      "items": {
        "type": "string"
      },
      "minItems": 1
    },
    "outliers": {
      "type": "array",
      "description": "Number of outliers n sigma away from mean for some list of numbers.",
      "items": {
        "type": "object",
        "properties": {
          "n": {
            "type": "integer"
          },
          "count": {
            "type": "integer"
          }
        },
        "required": [
          "n",
          "count"
        ],
        "additionalProperties": true
      },
      "minItems": 1
    },
    "aggregate": {
      "type": "object",
      "description": "Aggregate metadata about some list of numbers.",
      "properties": {
        "name": {
          "$ref": "#/definitions/name"
        },
        "description": {
          "$ref": "#/definitions/description"
        },
        "count": {
          "type": "integer",
          "description": "A count of values in the list."
        },
        "min": {
          "type": "number",
          "description": "Minimum value of the list."
        },
        "max": {
          "type": "number",
          "description": "Maximum value of the list."
        },
        "mean": {
          "type": "number",
          "description": "Mean value of the list."
        },
        "median": {
          "type": "number",
          "description": "Median value of the list."
        },
        "std": {
          "type": "number",
          "description": "Unbiased standard deviation value of the list."
        },
        "quartile_1": {
          "type": "number",
          "description": "The 25th percentile value of the list."
        },
        "quartile_3": {
          "type": "number",
          "description": "The 75th percentile value of the list."
        },
        "kurtosis": {
          "type": "number",
          "description": "The unbiased kurtosis of the distribution using Fisher’s definition of kurtosis (kurtosis of normal == 0.0). Normalized by N-1."
        },
        "skewness": {
          "type": "number",
          "description": "The unbiased skew of the distribution."
        }
      },
      "additionalProperties": true
    },
    "python_value": {
      "description": "A Python value. Schema allows a value of any type, even not JSON-compatible."
    },
    "python_type": {
      "description": "A Python type.",
      "format": "python-type"
    },
    "supported_media_types": {
      "allOf": [{"$ref": "#/definitions/media_types"}],
      "description": "Which media types a primitive knows how to manipulate."
    },
    "timestamp": {
      "type": "string",
      "description": "A timestamp.",
      "anyOf": [
        {"format": "date-time"},
        {"format": "date"}
      ]
    },
    "problem": {
      "type": "object",
      "properties": {
        "task_keywords": {
          "type": "array",
          "description": "Keywords describing the task.",
          "items": {
            "oneOf": [
              {"enum": ["CLASSIFICATION"], "description": "https://en.wikipedia.org/wiki/Statistical_classification"},
              {"enum": ["REGRESSION"], "description": "https://en.wikipedia.org/wiki/Regression_analysis"},
              {"enum": ["CLUSTERING"], "description": "https://en.wikipedia.org/wiki/Cluster_analysis"},
              {"enum": ["LINK_PREDICTION"]},
              {"enum": ["VERTEX_NOMINATION"]},
              {"enum": ["VERTEX_CLASSIFICATION"]},
              {"enum": ["COMMUNITY_DETECTION"], "description": "https://en.wikipedia.org/wiki/Community_search"},
              {"enum": ["GRAPH_MATCHING"], "description": "https://en.wikipedia.org/wiki/Graph_matching"},
              {"enum": ["FORECASTING"]},
              {"enum": ["COLLABORATIVE_FILTERING"], "description": "https://en.wikipedia.org/wiki/Collaborative_filtering"},
              {"enum": ["OBJECT_DETECTION"], "description": "https://en.wikipedia.org/wiki/Object_detection"},
              {"enum": ["SEMISUPERVISED"]},
              {"enum": ["BINARY"]},
              {"enum": ["MULTICLASS"]},
              {"enum": ["MULTILABEL"]},
              {"enum": ["UNIVARIATE"]},
              {"enum": ["MULTIVARIATE"]},
              {"enum": ["OVERLAPPING"]},
              {"enum": ["NONOVERLAPPING"]},
              {"enum": ["TABULAR"]},
              {"enum": ["RELATIONAL"]},
              {"enum": ["NESTED"]},
              {"enum": ["IMAGE"]},
              {"enum": ["AUDIO"]},
              {"enum": ["VIDEO"]},
              {"enum": ["SPEECH"]},
              {"enum": ["TEXT"]},
              {"enum": ["GRAPH"]},
              {"enum": ["MULTIGRAPH"]},
              {"enum": ["TIME_SERIES"]},
              {"enum": ["GROUPED"]},
              {"enum": ["GEOSPATIAL"]},
              {"enum": ["REMOTE_SENSING"], "description":  "https://en.wikipedia.org/wiki/Remote_sensing"},
              {"enum": ["LUPI"]},
              {"enum": ["MISSING_METADATA"]},
              {"enum": ["MULTIPLE_INSTANCE_LEARNING"]}
            ]
          },
          "minItems": 1
        },
        "performance_metrics": {
          "type": "array",
          "description": "For which performance metrics to optimize for?",
          "items": {
            "$ref": "#/definitions/performance_metric"
          },
          "minItems": 1
        }
      },
      "additionalProperties": true
    },
    "problem_inputs": {
      "type": "array",
      "description": "A list describing input datasets for the problem and associated targets. This list should match the list of inputs to a solution pipeline, in order.",
      "items": {
        "type": "object",
        "description": "A description of an input dataset.",
        "properties": {
          "dataset_id": {
            "allOf": [{"$ref": "#/definitions/id"}],
            "description": "An ID of a dataset associated with this input, among known or available datasets. Information which datasets precisely (version, digest, etc.) are inputs should be available elsewhere, e.g., in a pipeline run description, while this ID serves to map problem inputs to those datasets."
          },
          "targets": {
            "allOf": [{"$ref": "#/definitions/targets"}],
            "description": "A list of targets used for this problem from this dataset."
          },
          "forecasting_horizon": {
            "type": "object",
            "description": "In time series forecasting, the problem description can contain additional information about the horizon of forecast.",
            "properties": {
              "resource_id": {
                "$ref": "#/definitions/resource_id"
              },
              "column_index": {
                "$ref": "#/definitions/column_index"
              },
              "column_name": {
                "$ref": "#/definitions/column_name"
              },
              "horizon_value": {
                "type": "number",
                "description": "The maximum number of time steps in future the predictions will need to be made, in units of \"time_granularity\" of the referenced column."
              }
            },
            "required": [
              "resource_id",
              "column_index",
              "column_name",
              "horizon_value"
            ],
            "additionalProperties": true
          },
          "privileged_data": {
            "type": "array",
            "description": "A list of privileged data columns related to unavailable attributes during testing. These columns do not have data available in the test split of a dataset.",
            "items": {
              "type": "object",
              "properties": {
                "privileged_data_index": {
                  "type": "integer",
                  "description": "An index of the privileged data column in this list of privileged data columns, 0-based."
                },
                "resource_id": {
                  "$ref": "#/definitions/resource_id"
                },
                "column_index": {
                  "$ref": "#/definitions/column_index"
                },
                "column_name": {
                  "$ref": "#/definitions/column_name"
                }
              },
              "required": [
                "privileged_data_index",
                "resource_id",
                "column_index",
                "column_name"
              ],
              "additionalProperties": true
            },
            "minItems": 1
          }
        },
        "required": [
          "dataset_id"
        ],
        "additionalProperties": true
      },
      "minItems": 1
    },
    "data_augmentation": {
      "type": "array",
      "description": "Information about internal or external sources of data that can be used to address the challenge of data augmentation.",
      "items": {
        "type": "object",
        "properties": {
          "domain": {
            "allOf": [{"$ref": "#/definitions/keywords"}],
            "description": "The application domain(s) of the source (e.g., government, census, economics)."
          },
          "keywords": {
            "allOf": [{"$ref": "#/definitions/keywords"}],
            "description": "Additional tags that help narrow the search (e.g., housing, household income)."
          }
        },
        "additionalProperties": true
      },
      "minItems": 1
    },
    "resource_id": {
      "type": "string"
    },
    "column_index": {
      "type": "integer",
      "description": "An index of the column, 0-based."
    },
    "column_name": {
      "allOf": [{"$ref": "#/definitions/name"}],
      "description": "A name of the column. There are no restrictions on the content, length, it can contain whitespace, and names do not even have to be unique."
    },
    "data_reference": {
      "type": "string",
      "description": "Data reference is a string which identifies an output of a step or a pipeline input and forms a data-flow connection between data available and an input to a step.",
      "examples": [
        "steps.0.produce",
        "inputs.1"
      ]
    },
    "context": {
      "description": "Context in which a pipeline was run.",
      "oneOf": [
        {"enum": ["PRETRAINING"], "description": "Pipeline was run during building/training of the system itself, e.g., during metalearning."},
        {"enum": ["TESTING"], "description": "Pipeline was run during development or testing of the system itself, e.g., during debugging. This is also a default context."},
        {"enum": ["EVALUATION"], "description": "Pipeline was run during evaluation of the system itself, e.g., blind evaluation."},
        {"enum": ["PRODUCTION"], "description": "Pipeline was run during regular (production) operation of the system."}
      ]
    },
    "users": {
      "type": "array",
      "description": "A list of users associated with the value.",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "allOf": [{"$ref": "#/definitions/id"}],
            "description": "Globally unique ID for this user. It can be opaque, but it should identify the same user across sessions. Consider using UUID variant 5 with namespace set to the name of your system and name to an ID in your system's database."
          },
          "reason": {
            "allOf": [{"$ref": "#/definitions/description"}],
            "description": "A natural language description of what the user did to be on the list, e.g., \"Picked a pipeline from a list of pipelines.\"."
          },
          "rationale": {
            "allOf": [{"$ref": "#/definitions/description"}],
            "description": "A natural language description by the user of what the user did, e.g., \"I picked a pipeline because it looks short in comparison with others.\"."
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": true
      },
      "minItems": 1
    },
    "container_argument": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "description": "A regular container type output from another step or pipeline's input.",
          "enum": ["CONTAINER"]
        },
        "data": {
          "$ref": "#/definitions/data_reference"
        }
      },
      "required": [
        "type",
        "data"
      ],
      "additionalProperties": true
    },
    "container_arguments": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "description": "A list of regular container type outputs from another steps or pipeline's inputs.",
          "enum": ["CONTAINER"]
        },
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/data_reference"
          },
          "minItems": 1
        }
      },
      "required": [
        "type",
        "data"
      ],
      "additionalProperties": true
    },
    "data_argument": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "description": "A singleton output from another step in a pipeline. This means that container's sole element is passed as an argument to the primitive instead of the whole container value.",
          "enum": ["DATA"]
        },
        "data": {
          "$ref": "#/definitions/data_reference"
        }
      },
      "required": [
        "type",
        "data"
      ],
      "additionalProperties": true
    },
    "data_arguments": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "description": "A list of singleton outputs from other steps in a pipeline.",
          "enum": ["DATA"]
        },
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/data_reference"
          },
          "minItems": 1
        }
      },
      "required": [
        "type",
        "data"
      ],
      "additionalProperties": true
    },
    "primitive_argument": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "description": "A primitive instance to be passed as a hyper-parameter. A primitive should be part of a pipeline and is identified by its step.",
          "enum": ["PRIMITIVE"]
        },
        "data": {
          "type": "integer",
          "description": "0-based index identifying a step of which primitive is used as a value."
        }
      },
      "required": [
        "type",
        "data"
      ],
      "additionalProperties": true
    },
    "primitive_arguments": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "description": "A list of primitive instances to be passed as a hyper-parameter. Primitives should be part of a pipeline and are identified by their step.",
          "enum": ["PRIMITIVE"]
        },
        "data": {
          "type": "array",
          "items": {
            "type": "integer",
            "description": "0-based index identifying a step of which primitive is used as a value."
          },
          "minItems": 1
        }
      },
      "required": [
        "type",
        "data"
      ],
      "additionalProperties": true
    },
    "value_argument": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "description": "A constant value of a hyper-parameter. Each hyper-parameter class knows how to convert its value to a JSON-compatible structure and back.",
          "enum": ["VALUE"]
        },
        "data": {
          "description": "Hyper-parameter value as converted to a JSON-compatible structure by a hyper-parameter class."
        }
      },
      "required": [
        "type",
        "data"
      ],
      "additionalProperties": true
    },
    "arguments": {
      "type": "object",
      "description": "A mapping between primitive's arguments and their values. Primitive's arguments are passed in turn to primitive's methods which need them. Only those which are specified as kind \"PIPELINE\" in primitive's metadata can be specified here.",
      "additionalProperties": false,
      "patternProperties": {
        "^[A-Za-z][A-Za-z_0-9]*$": {
          "oneOf": [
            {
              "$ref": "#/definitions/container_argument"
            },
            {
              "$ref": "#/definitions/container_arguments"
            },
            {
              "$ref": "#/definitions/data_argument"
            },
            {
              "$ref": "#/definitions/value_argument"
            }
          ]
        }
      }
    },
    "hyperparams": {
      "type": "object",
      "description": "A mapping between primitive's hyper-parameters and their values.",
      "additionalProperties": false,
      "patternProperties": {
        "^[A-Za-z][A-Za-z_0-9]*([.][A-Za-z][A-Za-z_0-9]*)*$": {
          "oneOf": [
            {
              "$ref": "#/definitions/container_argument"
            },
            {
              "$ref": "#/definitions/data_argument"
            },
            {
              "$ref": "#/definitions/primitive_argument"
            },
            {
              "$ref": "#/definitions/value_argument"
            },
            {
              "$ref": "#/definitions/data_arguments"
            },
            {
              "$ref": "#/definitions/primitive_arguments"
            }
          ]
        }
      }
    },
    "pipeline_inputs": {
      "type": "array",
      "description": "Inputs to a pipeline. The order of inputs matter. Inputs are referenced by steps using a data reference.",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "$ref": "#/definitions/name"
          }
        },
        "additionalProperties": true
      }
    },
    "pipeline_outputs": {
      "type": "array",
      "description": "Outputs from a pipeline. The order of outputs matter. Each output references an output of a step and in this way makes that step output a pipeline output as well.",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "$ref": "#/definitions/name"
          },
          "data": {
            "$ref": "#/definitions/data_reference"
          }
        },
        "required": [
          "data"
        ],
        "additionalProperties": true
      }
    },
    "pipeline_steps": {
      "type": "array",
      "description": "Steps defining pipeline's logic.",
      "items": {
        "type": "object",
        "oneOf": [
          {
            "properties": {
              "type": {
                "type": "string",
                "description": "A step which runs a primitive.",
                "enum": ["PRIMITIVE"]
              },
              "primitive": {
                "$ref": "#/definitions/primitive_reference"
              },
              "arguments": {
                "allOf": [{"$ref": "#/definitions/arguments"}],
                "description": "Arguments to a primitive as a whole. Not all arguments defined by a primitive have to be specified here. Furthermore, only those which are specified as kind \"PIPELINE\" in primitive's metadata can be specified. Constructor arguments should not be specified here, because they can be automatically created from other information."
              },
              "outputs": {
                "type": "array",
                "description": "A list of produce method names of this primitive which are outputs of this step.",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "The name of the primitive's produce method which returns output data available by this primitive step."
                    }
                  },
                  "required": [
                    "id"
                  ],
                  "additionalProperties": true
                },
                "minItems": 1
              },
              "hyperparams": {
                "allOf": [{"$ref": "#/definitions/hyperparams"}],
                "description": "Only those hyper-parameters which should be fixed as part of the pipeline should be specified here, e.g., control hyper-parameters. Any hyper-parameter specified here should not be further modified (e.g., tuned). Author of a pipeline decides which hyper-parameters are which, probably based on their semantic type."
              },
              "users": {
                "$ref": "#/definitions/users"
              }
            },
            "required": [
              "type",
              "primitive"
            ]
          },
          {
            "properties": {
              "type": {
                "type": "string",
                "description": "A step which runs another pipeline.",
                "enum": ["SUBPIPELINE"]
              },
              "pipeline": {
                "allOf": [{"$ref": "#/definitions/pipeline_or_pipeline_reference"}],
                "description": "A pipeline to run at this step, of pipelines known to the system."
              },
              "inputs": {
                "type": "array",
                "description": "Mapping between data references available in the context of the outer pipeline to inputs of sub-pipeline, in order.",
                "items": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "allOf": [{"$ref": "#/definitions/data_reference"}],
                      "description": "Data reference, probably of an output of a step or outer pipeline input, mapped to sub-pipeline's inputs in order."
                    }
                  },
                  "required": [
                    "data"
                  ],
                  "additionalProperties": true
                },
                "minItems": 1
              },
              "outputs": {
                "type": "array",
                "description": "Mapping between outputs of a sub-pipeline to names under which they should be exposed as outputs of this step, in order. For example: [{\"id\": \"predictions\"}] would map the first output of a sub-pipeline to a data reference \"steps.X.predictions\" where \"X\" is the step number of a given sub-pipeline step.",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "The name used in constructing the step's output data reference. If not provided, this output is skipped."
                    }
                  },
                  "required": [
                    "id"
                  ],
                  "additionalProperties": true
                },
                "minItems": 1
              }
            },
            "required": [
              "type",
              "pipeline",
              "inputs",
              "outputs"
            ]
          },
          {
            "properties": {
              "type": {
                "type": "string",
                "description": "This step is used to represent a pipeline template which can be used to generate full pipelines. Not to be used in the metalearning context. Additional properties to further specify the placeholder constraints are allowed.",
                "enum": ["PLACEHOLDER"]
              },
              "inputs": {
                "type": "array",
                "description": "Mapping between data references available in the context of the outer pipeline which can be used as inputs to resulting sub-pipeline, in order. Resulting sub-pipeline does not have to use all the inputs, but it cannot use any other inputs.",
                "items": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "allOf": [{"$ref": "#/definitions/data_reference"}],
                      "description": "Data reference, probably of an output of a step or outer pipeline input, mapped to resulting sub-pipeline's inputs in order."
                    }
                  },
                  "required": [
                    "data"
                  ],
                  "additionalProperties": true
                },
                "minItems": 1
              },
              "outputs": {
                "type": "array",
                "description": "Mapping between outputs of a resulting sub-pipeline to names under which they should be exposed as outputs of this step, in order. For example: [{\"id\": \"predictions\"}] would map the first output of a resulting sub-pipeline to a data reference \"steps.X.predictions\" where \"X\" is the step number of a given placeholder step.",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "The name used in constructing the step's output data reference."
                    }
                  },
                  "required": [
                    "id"
                  ],
                  "additionalProperties": true
                },
                "minItems": 1
              }
            },
            "required": [
              "type",
              "inputs",
              "outputs"
            ]
          }
        ],
        "additionalProperties": true
      },
      "minItems": 1
    },
    "model_features": {
      "type": "array",
      "description": "A set of features supported by an underlying model of a primitive.",
      "items": {
        "enum": [
          "BINARY",
          "MULTICLASS",
          "MULTILABEL",
          "UNIVARIATE",
          "MULTIVARIATE",
          "OVERLAPPING",
          "NONOVERLAPPING"
        ]
      },
      "minItems": 1
    },
    "primitive_reference": {
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/definitions/id"
        },
        "version": {
          "$ref": "#/definitions/version"
        },
        "python_path": {
          "$ref": "#/definitions/python_path"
        },
        "name": {
          "$ref": "#/definitions/name"
        },
        "digest": {
          "$ref": "#/definitions/digest"
        }
      },
      "required": [
        "id",
        "version",
        "python_path",
        "name"
      ],
      "additionalProperties": true
    },
    "file_columns": {
      "type": "array",
      "description": "When the value is referencing a file with columns (e.g., a CSV file), columns metadata might be known in advance.",
      "items": {
        "type": "object",
        "properties": {
          "column_index": {
            "$ref": "#/definitions/column_index"
          },
          "column_name": {
            "$ref": "#/definitions/column_name"
          },
          "description": {
            "$ref": "#/definitions/description"
          },
          "semantic_types": {
            "$ref": "#/definitions/semantic_types"
          },
          "foreign_key": {
            "$ref": "#/definitions/foreign_key"
          },
          "boundary_for" : {
            "$ref": "#/definitions/boundary_for"
          },
          "time_granularity" : {
            "$ref": "#/definitions/time_granularity"
          },
          "spatial_reference_system" : {
            "$ref": "#/definitions/spatial_reference_system"
          }
        },
        "required": [
          "column_index",
          "column_name"
        ],
        "additionalProperties": true
      },
      "minItems": 1
    },
    "file_columns_count": {
      "type": "integer",
      "description": "When the value is referencing a file with columns (e.g., a CSV file), number of columns might be known in advance."
    },
    "document_reference": {
      "description": "A reference to another document.",
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/definitions/id"
        },
        "digest": {
          "$ref": "#/definitions/digest"
        }
      },
      "required": [
        "id"
      ],
      "additionalProperties": true
    },
    "pipeline_run_reference": {
      "description": "A reference to a pipeline run.",
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/definitions/hash_id"
        }
      },
      "required": [
        "id"
      ],
      "additionalProperties": true
    },
    "problem_reference": {
      "allOf": [{"$ref": "#/definitions/document_reference"}],
      "description": "A reference to a problem."
    },
    "dataset_reference": {
      "allOf": [{"$ref": "#/definitions/document_reference"}],
      "description": "A reference to a dataset."
    },
    "pipeline_reference": {
      "allOf": [{"$ref": "#/definitions/document_reference"}],
      "description": "A reference to a pipeline."
    },
    "problem_or_problem_reference": {
      "anyOf": [
        {
          "$ref": "#/definitions/problem_reference"
        },
        {
          "$ref": "https://metadata.datadrivendiscovery.org/schemas/v0/problem.json"
        }
      ]
    },
    "dataset": {
      "allOf": [{"$ref": "https://metadata.datadrivendiscovery.org/schemas/v0/container.json"}],
      "description": "A dataset."
    },
    "dataset_or_dataset_reference": {
      "anyOf": [
        {
          "$ref": "#/definitions/dataset_reference"
        },
        {
          "$ref": "#/definitions/dataset"
        }
      ]
    },
    "pipeline_or_pipeline_reference": {
      "anyOf": [
        {
          "$ref": "#/definitions/pipeline_reference"
        },
        {
          "$ref": "https://metadata.datadrivendiscovery.org/schemas/v0/pipeline.json"
        }
      ]
    },
    "datasets": {
      "description": "A list of input datasets. The order matters because it is mapped to pipeline inputs.",
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/definitions/dataset_or_dataset_reference"
      }
    },
    "status": {
      "description": "Indicates whether a pipeline, or some portion of it, ran successfully. May include a message with more details about the status.",
      "type": "object",
      "properties": {
        "state": {
          "type": "string",
          "enum": ["SUCCESS", "FAILURE"]
        },
        "message": {
          "description": "Further information describing the status. Though not required, this is especially helpful in a FAILURE state. It can be or include a stacktrace.",
          "type": "string"
        }
      },
      "required": [
        "state"
      ],
      "additionalProperties": true
    },
    "logging": {
      "description": "Python LogRecord entries recorded during a method call. See https://docs.python.org/3/library/logging.html#logging.LogRecord for more information.",
      "type": "array",
      "minItems": 0,
      "items": {
        "description": "A Python LogRecord entry. Other custom fields are allowed (Python LogRecord can be extended with custom fields).",
        "type": "object",
        "properties": {
          "name": {
            "description": "The name of the logger used to log the event represented by this LogRecord. Note that this name will always have this value, even though it may be emitted by a handler attached to a different (ancestor) logger.",
            "type": "string"
          },
          "msg": {
            "description": "The non-interpolated event description message.",
            "type": "string"
          },
          "args": {
            "description": "Arguments for message interpolation, when JSON-serializable.",
            "type": ["object", "array"]
          },
          "levelname": {
            "description": "Level at which the logging call was made.",
            "type": "string"
          },
          "levelno": {
            "description": "Level at which the logging call was made.",
            "type": "integer"
          },
          "pathname": {
            "description": "The full pathname of the source file where the logging call was made.",
            "type": "string"
          },
          "filename": {
            "description": "Just the filename of the source file where the logging call was made.",
            "type": "string"
          },
          "module": {
            "description": "Python module name where the logging call was made.",
            "type": "string"
          },
          "exc_text": {
            "description": "Python exception and formatted stack trace as text.",
            "type": "string"
          },
          "exc_type": {
            "description": "Python exception type name.",
            "type": "string"
          },
          "stack_info": {
            "description": "Formatted stack trace as text.",
            "type": "string"
          },
          "lineno": {
            "description": "The line number in the source file where the logging call was made.",
            "type": "integer"
          },
          "funcName": {
            "description": "The name of the function or method from which the logging call was made.",
            "type": "string"
          },
          "created": {
            "type": "number"
          },
          "msecs": {
            "type": "number"
          },
          "relativeCreated": {
            "type": "number"
          },
          "thread": {
            "type": "integer"
          },
          "threadName": {
            "type": "string"
          },
          "processName": {
            "type": "string"
          },
          "process": {
            "type": "integer"
          },
          "message": {
            "description": "The interpolated event description message.",
            "type": "string"
          },
          "asctime": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "msg",
          "levelname",
          "levelno",
          "pathname",
          "filename",
          "module",
          "lineno",
          "funcName",
          "created",
          "msecs",
          "relativeCreated",
          "message",
          "asctime"
        ],
        "additionalProperties": true
      }
    },
    "method_call": {
      "description": "Information about a method called on the primitive.",
      "oneOf": [
        {
          "allOf": [
            {
              "description": "Any method call except the constructor.",
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Name of the Python method called.",
                  "not": {
                    "enum": ["__init__"]
                  }
                },
                "arguments": {
                  "$ref": "#/definitions/arguments",
                  "description": "Pipeline arguments to methods are provided in a standard way, but methods can have additional runtime arguments or arguments overriding hyper-parameters for a call. Those are the values have to be explicitly provided here."
                }
              },
              "required": [
                "name"
              ],
              "additionalProperties": true
            },
            {
              "$ref": "#/definitions/method_call_base"
            }
          ]
        },
        {
          "allOf": [
            {
              "description": "A constructor method call.",
              "type": "object",
              "properties": {
                "name": {
                  "description": "Name of the Python method called.",
                  "type": "string",
                  "enum": ["__init__"]
                }
              },
              "required": [
                "name"
              ],
              "not": {
                "description": "Arguments to constructor should not be provided, because they are provided by the runtime and are runtime specific (paths to volumes, etc.).",
                "required": [
                  "arguments"
                ]
              },
              "additionalProperties": true
            },
            {
              "$ref": "#/definitions/method_call_base"
            }
          ]
        }
      ]
    },
    "method_call_base": {
      "description": "General information about a single method call, common to all method calls.",
      "type": "object",
      "properties": {
        "logging": {
          "$ref": "#/definitions/logging"
        },
        "metadata": {
          "description": "If the method call returns a container type, we store its metadata.",
          "anyOf": [
            {
              "type": "object",
              "description": "For \"CallResult\", we store metadata under \"value\" key.",
              "properties": {
                "value": {
                  "$ref": "#/definitions/metadata_values"
                }
              }
            },
            {
              "type": "object",
              "description": "For \"MultiCallResult\", keys should match \"values\" names, which are primitive's produce method names",
              "additionalProperties": false,
              "patternProperties": {
                "^produce[A-Za-z_0-9]*$": {
                  "$ref": "#/definitions/metadata_values"
                }
              }
            }
          ]
        },
        "status": {
          "$ref": "#/definitions/status"
        },
        "start": {
          "allOf": [{"$ref": "#/definitions/timestamp"}],
          "description": "Absolute timestamp of the start of the method call."
        },
        "end": {
          "allOf": [{"$ref": "#/definitions/timestamp"}],
          "description": "Absolute timestamp of the end of the method call."
        },
        "calls": {
          "description": "The number of additional times this method was called consecutively with the exactly same arguments in same runtime environment. When omitted, this method was called once. When used, the corresponding \"start\" timestamp is recorded before the first method call and the corresponding \"end\" timestamp is recorded after the final method call. This is an optimization allowing the combining of identical consecutive method calls into one record.",
          "type": "integer",
          "minimum": 1
        },
        "environment": {
          "$ref": "#/definitions/runtime_environment"
        }
      },
      "required": [
        "status",
        "start",
        "end"
      ],
      "additionalProperties": true
    },
    "metadata_values": {
      "description": "This matches the output of \"Metadata.to_json_structure\" method.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "selector": {
            "type": "array",
            "items": {
              "type": ["string", "integer"]
            },
            "minItems": 0
          },
          "metadata": {
            "description": "Metadata associated with the value at \"selector\".",
            "type": "object"
          }
        }
      },
      "minItems": 0
    },
    "runtime_environment": {
      "description": "A description of the runtime environment, including engine versions, Docker images, compute resources, and benchmarks.",
      "type": "object",
      "properties": {
        "id": {
          "description": "A hash ID computed over the whole runtime environment document to allow for faster identification of same runtime environments.",
          "allOf": [{"$ref": "#/definitions/hash_id"}]
        },
        "worker_id": {
          "description": "A globally unique identifier for the machine on which this pipeline run occurred. The idea is that the worker specifies the system inside which the pipeline is run so that multiple runs on the same system can be grouped together.",
          "type": "string"
        },
        "reference_engine_version": {
          "description": "A version of the released d3m core package with the reference engine used to run this pipeline. Provide the version of the released d3m core package even if your engine is subclassing the reference engine. Alternatively, if you are not using a released d3m core package, provide a git commit hash of the d3m core package repository with the reference engine you used.",
          "anyOf": [
            {
              "$ref": "#/definitions/version"
            },
            {
              "$ref": "#/definitions/git_commit"
            }
          ]
        },
        "engine_version": {
          "description": "A version of your engine used to run this pipeline (or reference engine, if directly using it). This can be useful for the author of the pipeline run to record, but is less useful for others. For others, \"reference_engine_version\" is probably more useful.",
          "anyOf": [
            {
              "$ref": "#/definitions/version"
            },
            {
              "$ref": "#/definitions/git_commit"
            }
          ]
        },
        "base_docker_image": {
          "description": "If a pipeline is run inside a Docker container which is based on a public image or known base image, then this field should specify that Docker image. I.e., if your system is using a private Docker image but is extending a \"complete\" Docker image, then list the \"complete\" Docker image here.",
          "allOf": [{"$ref": "#/definitions/docker_image"}]
        },
        "docker_image": {
          "description": "If a pipeline is run inside a Docker container, this field should specify the Docker image used to run this pipeline. This can be useful for the author of the pipeline run to record, but is less useful for others. For others, \"base_docker_image\" is probably more useful.",
          "allOf": [{"$ref": "#/definitions/docker_image"}]
        },
        "resources": {
          "$ref": "#/definitions/compute_resources"
        },
        "reference_benchmarks": {
          "$ref": "#/definitions/reference_benchmarks"
        }
      },
      "required": [
        "id",
        "worker_id"
      ]
    },
    "pipeline_run_steps": {
      "description": "All of the steps invoked in the pipeline run. There is a one-to-one correspondence between this array and the steps in the pipeline.",
      "type": "array",
      "items": {
        "type": "object",
        "oneOf": [
          {
            "properties": {
              "type": {
                "type": "string",
                "description": "A primitive step.",
                "enum": ["PRIMITIVE"]
              },
              "hyperparams": {
                "allOf": [{"$ref": "#/definitions/hyperparams"}],
                "description": "Together with hyper-parameters listed as part of a pipeline they complete all values necessary to instantiate \"hyperparams\" constructor argument of the primitive. All hyper-parameter values have to be listed explicitly, even if the value matches the default value of a hyper-parameter."
              },
              "random_seed": {
                "description": "Random seed used, if the primitive accepts a random seed.",
                "type": "integer"
              },
              "method_calls": {
                "description": "Information about the methods called on the primitive, in the order called.",
                "type": "array",
                "items": {
                  "$ref": "#/definitions/method_call"
                },
                "minItems": 1
              },
              "status": {
                "$ref": "#/definitions/status"
              },
              "start": {
                "allOf": [{"$ref": "#/definitions/timestamp"}],
                "description": "Absolute timestamp of the start of the execution of the primitive. Execution of the primitive starts with the first method call but it can also include any preparation work not captured by method calls, so timestamp can be sooner than the first method call timestamp."
              },
              "end": {
                "allOf": [{"$ref": "#/definitions/timestamp"}],
                "description": "Absolute timestamp of the end of the execution of the primitive. Execution of the primitive ends with the last method call but it can also include any cleanup work not captured by method calls, so timestamp can be later than the last method call timestamp."
              },
              "environment": {
                "allOf": [{"$ref": "#/definitions/runtime_environment"}],
                "description": "Provided if this step was run in a different runtime environment than the runtime environment specified at a higher level."
              }
            },
            "$comment": "TODO: Make \"start\" and \"end\" required when the next version of this schema is released.",
            "required": [
              "type",
              "status"
            ],
            "not": {
              "required": [
                "steps"
              ]
            }
          },
          {
            "properties": {
              "type": {
                "type": "string",
                "description": "A sub-pipeline step.",
                "enum": ["SUBPIPELINE"]
              },
              "steps": {
                "allOf": [{"$ref": "#/definitions/pipeline_run_steps"}],
                "description": "Steps of a sub-pipeline, recursively."
              },
              "status": {
                "$ref": "#/definitions/status"
              },
              "start": {
                "allOf": [{"$ref": "#/definitions/timestamp"}],
                "description": "Absolute timestamp of the start of the execution of the sub-pipeline. Execution of the sub-pipeline starts with the execution of the first primitive but it can also include any preparation work not captured by primitive, so timestamp can be sooner than the first primitive timestamp."
              },
              "end": {
                "allOf": [{"$ref": "#/definitions/timestamp"}],
                "description": "Absolute timestamp of the end of the execution of the sub-pipeline. Execution of the sub-pipeline ends with the execution of the last primitive but it can also include any cleanup work not captured by primitive, so timestamp can be later than the last primitive timestamp."
              },
              "environment": {
                "allOf": [{"$ref": "#/definitions/runtime_environment"}],
                "description": "Provided if this step was run in a different runtime environment than the runtime environment specified at a higher level."
              },
              "random_seed": {
                "$ref": "#/definitions/pipeline_random_seed"
              }
            },
            "$comment": "TODO: Make \"start\", \"end\", and \"random_seed\" required when the next version of this schema is released.",
            "required": [
              "type",
              "status"
            ],
            "not": {
              "required": [
                "hyperparams",
                "random_seed",
                "method_calls"
              ]
            }
          }
        ],
        "additionalProperties": true
      },
      "minItems": 1
    },
    "performance_metric": {
      "type": "object",
      "properties": {
        "metric": {
          "type": "string"
        },
        "params": {
          "type": "object"
        }
      },
      "required": [
        "metric"
      ],
      "oneOf": [
        {
          "properties": {
            "metric": {"enum": ["ACCURACY"]}
          }
        },
        {
          "properties": {
            "metric": {"enum": ["PRECISION"]},
            "params": {
              "type": "object",
              "properties": {
                "pos_label": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          }
        },
        {
          "properties": {
            "metric": {"enum": ["RECALL"]},
            "params": {
              "type": "object",
              "properties": {
                "pos_label": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          }
        },
        {
          "properties": {
            "metric": {"enum": ["F1"]},
            "params": {
              "type": "object",
              "properties": {
                "pos_label": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          }
        },
        {
          "properties": {
            "metric": {"enum": ["F1_MICRO"]}
          }
        },
        {
          "properties": {
            "metric": {"enum": ["F1_MACRO"]}
          }
        },
        {
          "properties": {
            "metric": {"enum": ["ROC_AUC"]}
          }
        },
        {
          "properties": {
            "metric": {"enum": ["ROC_AUC_MICRO"]}
          }
        },
        {
          "properties": {
            "metric": {"enum": ["ROC_AUC_MACRO"]}
          }
        },
        {
          "properties": {
            "metric": {"enum": ["MEAN_SQUARED_ERROR"]}
          }
        },
        {
          "properties": {
            "metric": {"enum": ["ROOT_MEAN_SQUARED_ERROR"]}
          }
        },
        {
          "properties": {
            "metric": {"enum": ["MEAN_ABSOLUTE_ERROR"]}
          }
        },
        {
          "properties": {
            "metric": {"enum": ["R_SQUARED"]}
          }
        },
        {
          "properties": {
            "metric": {"enum": ["NORMALIZED_MUTUAL_INFORMATION"]}
          }
        },
        {
          "properties": {
            "metric": {"enum": ["JACCARD_SIMILARITY_SCORE"]},
            "params": {
              "type": "object",
              "properties": {
                "pos_label": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          }
        },
        {
          "properties": {
            "metric": {"enum": ["PRECISION_AT_TOP_K"]},
            "params": {
              "type": "object",
              "properties": {
                "k": {
                  "type": "integer"
                }
              },
              "additionalProperties": true
            }
          }
        },
        {
          "properties": {
            "metric": {"enum": ["OBJECT_DETECTION_AVERAGE_PRECISION"]}
          }
        },
        {
          "properties": {
            "metric": {"enum": ["HAMMING_LOSS"]}
          }
        },
        {
          "properties": {
            "metric": {"enum": ["HITS_AT_K"]},
            "params": {
              "type": "object",
              "properties": {
                "k": {
                  "type": "integer"
                }
              },
              "additionalProperties": true
            }
          }
        },
        {
          "properties": {
            "metric": {"enum": ["MEAN_RECIPROCAL_RANK"]}
          }
        }
      ],
      "additionalProperties": true
    },
    "targets": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "target_index": {
            "type": "integer",
            "description": "An index of the target in this list of targets, 0-based."
          },
          "resource_id": {
            "$ref": "#/definitions/resource_id"
          },
          "column_index": {
            "$ref": "#/definitions/column_index"
          },
          "column_name": {
            "$ref": "#/definitions/column_name"
          },
          "clusters_number": {
            "type": "integer",
            "description": "The number of clusters to be generated by the solution algorithm (if this information is known apriori)."
          }
        },
        "required": [
          "target_index",
          "resource_id",
          "column_index",
          "column_name"
        ],
        "additionalProperties": true
      },
      "minItems": 1
    },
    "scores": {
      "description": "Scores should match the output of the scoring pipeline.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "metric": {
            "description": "Description of a metric used. Generally it should match one from the problem description, but it can also be different.",
            "anyOf": [
              {
                "$ref": "#/definitions/performance_metric"
              },
              {
                "type": "object",
                "properties": {
                  "metric": {
                    "description": "A custom metric name. Any custom metric name should match the metric name in the scoring pipeline output.",
                    "type": "string"
                  }
                },
                "required": [
                  "metric"
                ],
                "additionalProperties": true
              }
            ]
          },
          "value": {
            "description": "The value of the scoring metric.",
            "type": "number"
          },
          "normalized": {
            "description": "The normalized value of the scoring metric. Value is from the [0, 1] interval, where higher is better.",
            "type": "number"
          }
        },
        "required": [
          "metric",
          "value"
        ],
        "additionalProperties": true
      },
      "minItems": 1
    },
    "predictions": {
      "description": "The predictions table generated from the pipeline, including the index column. This follows the MIT Lincoln Labs predictions format. There is a one-to-one correspondence between the header array and the values array.",
      "type": "object",
      "properties": {
        "header": {
          "description": "A list of predictions table's column names.",
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/definitions/column_name"
          }
        },
        "values": {
          "description": "An array of predictions. Every element of this array is a column of values corresponding to one header element.",
          "type": "array",
          "minItems": 1,
          "items": {
            "description": "A single column of values.",
            "type": "array",
            "minItems": 1,
            "items": {
              "description": "A single prediction value."
            }
          }
        }
      },
      "required": [
        "header",
        "values"
      ],
      "additionalProperties": true
    },
    "pipeline_run_results": {
      "description": "The predictions of the pipeline and corresponding metric scores.",
      "type": "object",
      "properties": {
        "scores": {
          "$ref": "#/definitions/scores"
        },
        "predictions": {
          "$ref": "#/definitions/predictions"
        }
      },
      "additionalProperties": true
    },
    "additional_pipeline": {
      "description": "An auxiliary pipeline used for preparing data or scoring.",
      "type": "object",
      "properties": {
        "pipeline": {
          "$ref": "#/definitions/pipeline_or_pipeline_reference"
        },
        "steps": {
          "$ref": "#/definitions/pipeline_run_steps"
        },
        "status": {
          "$ref": "#/definitions/status"
        },
        "start": {
          "$ref": "#/definitions/pipeline_run_start"
        },
        "end": {
          "$ref": "#/definitions/pipeline_run_end"
        },
        "random_seed": {
          "$ref": "#/definitions/pipeline_random_seed"
        },
        "environment": {
          "$ref": "#/definitions/runtime_environment"
        }
      },
      "$comment": "TODO: Make \"start\", \"end\", and \"random_seed\" required when the next version of this schema is released.",
      "required": [
        "pipeline",
        "status"
      ],
      "additionalProperties": true
    },
    "pipeline_run": {
      "description": "How a pipeline was run and corresponding results.",
      "type": "object",
      "properties": {
        "phase": {
          "description": "A string representing the phase with which this pipeline run is associated.",
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "FIT",
                "PRODUCE"
              ]
            },
            {
              "type": "string",
              "description": "Some other string representing the phase, for non-standard phases."
            }
          ]
        },
        "is_standard_pipeline": {
          "description": "Has been this pipeline run as a standard pipeline or not?",
          "type": "boolean"
        },
        "fold_group": {
          "description": "Groups pipeline runs which belong together. E.g., they are part of the same cross-validation evaluation run.",
          "type": "object",
          "properties": {
            "id": {
              "$ref": "#/definitions/id"
            },
            "fold": {
              "description": "The cross-validation fold index. If not part of the cross-validation, this can be set to 0.",
              "type": "integer",
              "minimum": 0
            }
          },
          "required": [
            "id",
            "fold"
          ],
          "additionalProperties": true
        },
        "data_preparation": {
          "$ref": "#/definitions/additional_pipeline"
        },
        "scoring": {
          "allOf": [
            {
              "$ref": "#/definitions/additional_pipeline"
            },
            {
              "properties": {
                "datasets": {
                  "$ref": "#/definitions/datasets"
                }
              }
            }
          ]
        },
        "results": {
          "$ref": "#/definitions/pipeline_run_results"
        }
      },
      "oneOf": [
        {
          "allOf": [
            {
              "not": {
                "required": [
                  "data_preparation"
                ]
              }
            },
            {
              "not": {
                "required": [
                  "scoring"
                ]
              },
              "properties": {
                "results": {
                  "not": {
                    "required": [
                      "scores"
                    ]
                  }
                }
              }
            }
          ]
        },
        {
          "required": [
            "data_preparation"
          ],
          "not": {
            "required": [
              "scoring"
            ]
          },
          "properties": {
            "results": {
              "not": {
                "required": [
                  "scores"
                ]
              }
            }
          }
        },
        {
          "properties": {
            "scoring": {
              "not": {
                "required": [
                  "datasets"
                ]
              }
            }
          },
          "required": [
            "data_preparation",
            "scoring"
          ]
        },
        {
          "properties": {
            "scoring": {
              "required": [
                "datasets"
              ]
            }
          },
          "required": [
            "scoring"
          ],
          "not": {
            "required": [
              "data_preparation"
            ]
          }
        }
      ],
      "$comment": "TODO: Make \"is_standard_pipeline\" required when the next version of this schema is released.",
      "required": [
        "phase"
      ],
      "additionalProperties": true
    },
    "previous_pipeline_run": {
      "allOf": [{"$ref": "#/definitions/pipeline_run_reference"}],
      "description": "References a pipeline run that occurred immediately before this pipeline run. Used for reproducibility, for example a test run would reference the train run. If it is not provided, it indicates the first pipeline run."
    },
    "compute_resources": {
      "description": "Compute resources available.",
      "type": "object",
      "properties": {
        "cpu": {
          "description": "CPU devices on the worker. If possible, only those available ot the pipeline runtime, otherwise all.",
          "type": "object",
          "properties": {
            "devices": {
              "description": "An array of CPU devices.",
              "type": "array",
              "minItems": 1,
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "A physical CPU device name.",
                    "type": "string"
                  }
                },
                "additionalProperties": true
              }
            },
            "physical_present": {
              "description": "The number of physical CPU cores present on the worker, but not necessary fully available the pipeline runtime.",
              "type": "integer",
              "minimum": 1
            },
            "logical_present": {
              "description": "The number of logical CPU cores present on the worker, but not necessary fully available the pipeline runtime.",
              "type": "integer",
              "minimum": 1
            },
            "configured_available": {
              "description": "The amount of CPU resources available to the pipeline runtime in Kubernetes CPU units or equivalent. See https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-cpu for more information.",
              "type": "string"
            },
            "constraints": {
              "description": "Any constraints as found in the cgroups (e.g., inside of a resource limited Docker container).",
              "type": "object"
            }
          },
          "additionalProperties": true
        },
        "gpu": {
          "description": "GPU devices on the worker. If possible, only those available ot the pipeline runtime, otherwise all.",
          "type": "object",
          "properties": {
            "devices": {
              "description": "An array of GPU devices.",
              "type": "array",
              "minItems": 1,
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "A GPU device name.",
                    "type": "string"
                  },
                  "memory": {
                    "description": "The total GPU memory on this device, in bytes.",
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": true
              }
            },
            "total_memory": {
              "description": "The total GPU memory over all devices, in bytes, but not necessary fully available the pipeline runtime.",
              "type": "integer",
              "minimum": 1
            },
            "configured_memory": {
              "description": "The amount of GPU memory available to the pipeline runtime in Kubernetes memory units or equivalent. See https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-memory for more information.",
              "type": "string"
            },
            "constraints": {
              "description": "Any constraints as found in the cgroups (e.g., inside of a resource limited Docker container).",
              "type": "object"
            }
          },
          "additionalProperties": true
        },
        "memory": {
          "description": "Memory devices on the worker. If possible, only those available ot the pipeline runtime, otherwise all.",
          "type": "object",
          "properties": {
            "devices": {
              "description": "An array of memory devices.",
              "type": "array",
              "minItems": 1,
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "A physical memory device name.",
                    "type": "string"
                  },
                  "memory": {
                    "description": "The amount of memory on this device, in bytes.",
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": true
              }
            },
            "total_memory": {
              "description": "The total memory over all memory devices, in bytes, but not necessary fully available the pipeline runtime.",
              "type": "integer",
              "minimum": 1
            },
            "configured_memory": {
              "description": "The amount of memory available to the pipeline runtime in Kubernetes memory units or equivalent. See https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-memory for more information.",
              "type": "string"
            },
            "constraints": {
              "description": "Any constraints as found in the cgroups (e.g., inside of a resource limited Docker container).",
              "type": "object"
            }
          },
          "additionalProperties": true
        }
      },
      "additionalProperties": true
    },
    "reference_benchmarks": {
      "description": "Reference benchmarks are pipeline runs of standard and optional additional benchmark pipelines which should be run on the worker during same or equivalent session so that this pipeline run can be expected to have the same timing characteristics. If it is known that worker configuration has not been changed between sessions, benchmark pipeline runs can be reused.",
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/definitions/pipeline_run_reference"
      }
    },
    "git_commit": {
      "description": "A reference to a particular git commit hash.",
      "type": "string",
      "pattern": "^[a-fA-F0-9]{40}$"
    },
    "pipeline_run_start": {
      "description": "Absolute timestamp of the start of the run of the pipeline.",
      "allOf": [{"$ref": "#/definitions/timestamp"}]
    },
    "pipeline_run_end":  {
      "description": "Absolute timestamp of the end of the run of the pipeline.",
      "allOf": [{"$ref": "#/definitions/timestamp"}]
    },
    "pipeline_random_seed": {
      "type": "integer",
      "description": "The main random seed used to run the pipeline."
    },
    "pure_primitive": {
      "type": "boolean",
      "description": "Does a primitive behave as a pure function. Are produced values always the same for same hyper-parameter values, arguments, random seed, and method calls made, including the order of method calls? Are there no side effects (mutations of state outside of primitive's internal state) when running the primitive? If primitive is connecting to Internet or some other resource not controlled by the runtime, then primitive is not pure. If primitive caches files during execution, then primitive is pure despite modifying more than primitive's internal state, given that caching is implemented so that it does not leak information between different runs of a primitive.",
      "default": true
    },
    "can_use_gpus": {
      "type": "boolean",
      "description": "Can a primitive use GPUs if available? Caller should control available GPUs to the primitive through \"CUDA_VISIBLE_DEVICES\" environment variable.",
      "default": true
    },
    "all_distinct_values": {
      "description": "All possible distinct non-missing values in a categorical attribute.",
      "type": "array",
      "minItems": 1
    }
  }
}
