package safeds.lang

/**
 * This parameter should only be used by expert users.
 */
@Experimental
@Targets([AnnotationTarget.Parameter])
annotation Expert

/**
 * The category of a declaration. It can be used for grouping.
 */
@Experimental
@Targets([
    AnnotationTarget.Class,
    AnnotationTarget.Enum,
    AnnotationTarget.Function,
    AnnotationTarget.Segment,
])
annotation Category(category: DataScienceCategory)

/**
 * A step in the data science process.
 * The letter "Q" is used as a separator for subcategories.
 */
@Experimental
enum DataScienceCategory {
    /**
     * Basic building blocks.
     */
    BasicElement

    /**
     * Load your data into the program.
     */
    DataImport

    /**
     * Save your data for later use.
     */
    DataExport

     /**
     * Explore your data.
     */
    DataExplorationQMetric
    DataExplorationQVisualization
    DataExplorationQGeneral

    /**
     * Prepare your data for analysis.
     */
    DataProcessingQColumn
    DataProcessingQTable
    DataProcessingQImage
    DataProcessingQImageList
    DataProcessingQTransformer

    /**
     * Configure a model and train it on your data.
     */
    ModelingQGeneral
    ModelingQClassicalClassification
    ModelingQClassicalRegression
    ModelingQNeuralNetwork

    /**
     * Evaluate the performance of your model.
     */
    ModelEvaluationQMetric
    ModelEvaluationQVisualization

    /**
     * Utility terms for general use and lambda functions.
     */
    UtilitiesQConversion
    UtilitiesQTable
    UtilitiesQImage
    UtilitiesQString
}

/**
 * Tags to associate with a declaration. They can be used for filtering.
 */
@Experimental
@Targets([
    AnnotationTarget.Annotation,
    AnnotationTarget.Class,
    AnnotationTarget.Enum,
    AnnotationTarget.Function,
    AnnotationTarget.Pipeline,
    AnnotationTarget.Segment,
])
annotation Tags(tags: List<String>)
