"""Special Cases"""

from enum import Enum


class Elem(Enum):
    """Type of function"""

    # if element is a variable
    V = 'variable'
    # if element is a parameter
    P = 'parameter'
    # if element is a theta
    T = 'theta'
    # if element is a function
    F = 'function'


class FCase(Enum):
    """function cases"""

    # Negative variable (-1*v)
    NEGVAR = 'negative_variable'
    # sum of variables over one index element v0 + v1 + v2 + ... + vn
    SUM = 'summation'
    # Negative sum, - (v0 + v1 + v2 + ... + vn)
    NEGSUM = 'negative_summation'

    # Variable, never used to describe a function
    # rather a variable, is always a special case
    # of a function that is just a variable
    VAR = 'variable'

    # once changed, the case becomes
    FVAR = 'variable_as_function'

    # calculation
    # prints differently (f_cal = p*v)
    CALC = 'calculation'

    # when a variable is a function
    VARF = 'function_as_variable'


class PCase(Enum):
    """parameter cases"""

    # just a number, stretched into an array
    NUM = 'number'
    # just a negative number, stretched into an array
    NEGNUM = 'negative_number'
    # zero
    ZERO = 'zero'
    # set of numbers
    SET = 'set'
    # negated set
    NEGSET = 'negative_set'


class ICase(Enum):
    """index cases"""

    # DUMMY INDEX
    DUMMY = 'dummy_index'
    # SELF CONTAINED INDEX
    SELF = 'self_contained_index'
