m4_include(`SQLCommon.m4')

DROP TYPE IF EXISTS MADLIB_SCHEMA.__utils_scales CASCADE;
CREATE TYPE MADLIB_SCHEMA.__utils_scales AS (
    mean                DOUBLE PRECISION[],
    std                 DOUBLE PRECISION[]
);

--

CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__utils_var_scales_result (
    in_state            DOUBLE PRECISION[]
) RETURNS MADLIB_SCHEMA.__utils_scales AS
'MODULE_PATHNAME', '__utils_var_scales_result'
LANGUAGE C IMMUTABLE STRICT
m4_ifdef(`__HAS_FUNCTION_PROPERTIES__', `NO SQL', `');

------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__utils_var_scales_transition (
    state               DOUBLE PRECISION[],
    ind_var             DOUBLE PRECISION[],
    dimension           INTEGER
) RETURNS DOUBLE PRECISION[] AS
'MODULE_PATHNAME', 'utils_var_scales_transition'
LANGUAGE C IMMUTABLE STRICT
m4_ifdef(`__HAS_FUNCTION_PROPERTIES__', `NO SQL', `');

--

CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__utils_var_scales_merge (
    state1              DOUBLE PRECISION[],
    state2              DOUBLE PRECISION[]
) RETURNS DOUBLE PRECISION[] AS
'MODULE_PATHNAME', 'utils_var_scales_merge'
LANGUAGE C IMMUTABLE STRICT
m4_ifdef(`__HAS_FUNCTION_PROPERTIES__', `NO SQL', `');

--

CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__utils_var_scales_final (
    state               DOUBLE PRECISION[]
) RETURNS DOUBLE PRECISION[] AS
'MODULE_PATHNAME', 'utils_var_scales_final'
LANGUAGE C IMMUTABLE STRICT
m4_ifdef(`__HAS_FUNCTION_PROPERTIES__', `NO SQL', `');

CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__utils_var_scales_non_zero_std_final (
    state               DOUBLE PRECISION[]
) RETURNS DOUBLE PRECISION[] AS
'MODULE_PATHNAME', 'utils_var_scales_non_zero_std_final'
LANGUAGE C IMMUTABLE STRICT
m4_ifdef(`__HAS_FUNCTION_PROPERTIES__', `NO SQL', `');

--

DROP AGGREGATE IF EXISTS MADLIB_SCHEMA.utils_var_scales (
    DOUBLE PRECISION[], INTEGER);
CREATE AGGREGATE MADLIB_SCHEMA.utils_var_scales (
    /* ind_var  */      DOUBLE PRECISION[],
    /* dimension*/      INTEGER
) (
    SType = DOUBLE PRECISION[],
    SFunc = MADLIB_SCHEMA.__utils_var_scales_transition,
    m4_ifdef(`__POSTGRESQL__', `', `prefunc = MADLIB_SCHEMA.__utils_var_scales_merge,')
    FinalFunc = MADLIB_SCHEMA.__utils_var_scales_final,
    InitCond = '{0,0,0,0}'
);

DROP AGGREGATE IF EXISTS MADLIB_SCHEMA.utils_var_scales_non_zero_std (
    DOUBLE PRECISION[], INTEGER);
CREATE AGGREGATE MADLIB_SCHEMA.utils_var_scales_non_zero_std (
    /* ind_var  */      DOUBLE PRECISION[],
    /* dimension*/      INTEGER
) (
    SType = DOUBLE PRECISION[],
    SFunc = MADLIB_SCHEMA.__utils_var_scales_transition,
    m4_ifdef(`__POSTGRESQL__', `', `prefunc = MADLIB_SCHEMA.__utils_var_scales_merge,')
    FinalFunc = MADLIB_SCHEMA.__utils_var_scales_non_zero_std_final,
    InitCond = '{0,0,0,0}'
);

------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.utils_normalize_data (
    x           DOUBLE PRECISION[],
    mean        DOUBLE PRECISION[],
    std         DOUBLE PRECISION[]
) RETURNS DOUBLE PRECISION[] AS
'MODULE_PATHNAME', 'utils_normalize_data'
LANGUAGE C IMMUTABLE STRICT
m4_ifdef(`__HAS_FUNCTION_PROPERTIES__', `NO SQL', `');
