Typedefs

malloc_fn

typedef void *(* malloc_fn) (__SIZE_TYPE__)

malloc_fn is a pointer to a malloc-type function i.e. with prototype: void * malloc(size_t)

free_fn

typedef void(* free_fn) (void *)

free_fn is a pointer to a free-type function i.e. with prototype: void free(void*)

frexp_fn

typedef double(* frexp_fn) (double, int *)

frexp_fn is a pointer to a frexp-type function i.e. with prototype: double frexp_fn(double, int*)

math_fn

typedef double(* math_fn) (double)

math_fn is a pointer to a generic real math function like log, exp...

math2_fn

typedef double(* math2_fn) (double, double)

math_fn is a pointer to a generic two parameters math function like pow

ldexp_fn

typedef double(* ldexp_fn) (double, int)

ldexp_fn is a pointer to a ldexp-type function i.e. with prototype: double ldexp_fn(double, int*)

real_function

typedef double(* real_function) (double, void *)

real_function defines a pointer to a univariate function that can require extra paramaters (second argument)

Enum

LibspotError

enum LibspotError {
    ERR_MEMORY_ALLOCATION_FAILED = 1000,
    ERR_LEVEL_OUT_OF_BOUNDS,
    ERR_Q_OUT_OF_BOUNDS,
    ERR_EXCESS_THRESHOLD_IS_NAN,
    ERR_ANOMALY_THRESHOLD_IS_NAN,
    ERR_DATA_IS_NAN,
};

Constants to store libspot errors.

Name Description
ERR_MEMORY_ALLOCATION_FAILED Allocation of the backing array failed.
ERR_LEVEL_OUT_OF_BOUNDS The level parameter must between 0 and 1.
ERR_Q_OUT_OF_BOUNDS The q parameter must be between 0 and 1-level.
ERR_EXCESS_THRESHOLD_IS_NAN The excess threshold has not been initialized.
ERR_ANOMALY_THRESHOLD_IS_NAN The anomaly threshold has not been initialized.
ERR_DATA_IS_NAN The input data is NaN.

SpotResult

enum SpotResult {
    NORMAL = 0,
    EXCESS = 1,
    ANOMALY = 2,
};

Possible outputs of a Spot step.

Name Description
NORMAL Data is normal.
EXCESS Data is in the tail (so the model has been updated)
ANOMALY Data is beyond the anomaly threshold.

Structures

Ubend

struct Ubend {
    unsigned long cursor;
    unsigned long capacity;
    double last_erased_data;
    int filled;
    double * data;
};

This container is a kind of circular vector.

First it is empty. Then we feed it with data until its max capacity is reached (transitory state). When it is full, the earlier data erase the older one (cruise state).

Member Description
cursor Current position inside the container.
capacity Max storage.
last_erased_data Last erased value (i.e. replaced by a new one)
filled Container fill status (1 = filled, 0 = not filled)
data Data container.

Peaks

struct Peaks {
    double e;
    double e2;
    double min;
    double max;
    struct Ubend container;
};

Stucture that computes stats about the peaks.

Member Description
e Sum of the elements.
e2 Sum of the square of the elements.
min Minimum of the elements.
max Maximum of the elements.
container Underlying data container.

Tail

struct Tail {
    double gamma;
    double sigma;
    struct Peaks peaks;
};

Stucture that embeds GPD parameter (GPD tail actually)

Member Description
gamma GPD gamma parameter.
sigma GPD sigma parameter.
peaks Underlyning Peaks structure.

Spot

struct Spot {
    double q;
    double level;
    int discard_anomalies;
    int low;
    double __up_down;
    double anomaly_threshold;
    double excess_threshold;
    unsigned long Nt;
    unsigned long n;
    struct Tail tail;
};

Main structure to run the SPOT algorithm.

Member Description
q Probability of an anomaly.
level Location of the tail (high quantile)
discard_anomalies Flag anomalies (1 = flag, 0 = don't flag)
low Upper/Lower tail choice (1 = lower tail, 0 = upper tail)
__up_down Internal constant (+/- 1.0)
anomaly_threshold Normal/abnormal threshold.
excess_threshold Tail threshold.
Nt Total number of excesses.
n Total number of seen data.
tail GPD Tail.

Functions

spot_init

int spot_init(struct Spot * spot, double q, int low, int discard_anomalies, double level, unsigned long max_excess)

Initialize the Spot structure.

Parameter Description
spot Spot instance
q Decision probability (Spot will flag extreme events that will have a probability lower than q)
low Lower tail mode (0 by defaut for upper tail and 1 for lower tail)
discard_anomalies Do not include anomalies in the model (default: 1, 0 otherwise)
level Excess level (it is a high quantile that delimits the tail)
max_excess Maximum number of data that are kept to analyze the tail

spot_free

void spot_free(struct Spot * spot)

Free the tail data.

Parameter Description
spot Spot instance

spot_fit

int spot_fit(struct Spot * spot, double const * data, unsigned long size)

Compute the first excess and anomaly thresholds based on training data.

Parameter Description
spot Spot instance
data Buffer of input data
size Size of the buffer

spot_step

int spot_step(struct Spot * spot, double x)

fit-predict step

Parameter Description
spot Spot instance
x new value

spot_quantile

double spot_quantile(struct Spot const * spot, double q)

Compute the value zq such that P(X>zq) = q.

Parameter Description
spot Spot instance
q Low probability (it must be within the tail)

spot_probability

double spot_probability(struct Spot const * spot, double z)

Compute the probability p such that P(X>z) = p.

Parameter Description
spot Spot instance
z High quantile (it must be within the tail)

set_allocators

void set_allocators(malloc_fn m, free_fn f)

Set the allocators object (malloc and free)

Parameter Description
m pointer to a "malloc" function
f pointer to a "free" function

set_float_utils

void set_float_utils(ldexp_fn l, frexp_fn f)

Set the ldexp/frexp functions.

By default these functions are provided but the API allows to change them. It is low level, you might rather use set_math_functions to provide optimized math functions.

Parameter Description
l pointer to a "ldexp" function (nil if you do not want to change it)
f pointer to a "frexp" function (nil if you do not want to change it)

set_math_functions

void set_math_functions(math_fn lo, math_fn ex, math2_fn po)

Set the log, exp and pow functions. It is recommended when you have access to optimized versions (e.g., from the standard library).

Parameter Description
lo pointer to a "log" function (nil if you do not want to change it)
ex pointer to an "exp" function (nil if you do not want to change it)
po pointer to a "pow" function (nil if you do not want to change it)

libspot_version

void libspot_version(char * buffer, unsigned long size)

Return the version of libspot.

Parameter Description
buffer input buffer to fill with
size size of the input buffer

libspot_license

void libspot_license(char * buffer, unsigned long size)

Return the license of the library.

Parameter Description
buffer input buffer to fill with
size size of the input buffer

libspot_error

void libspot_error(enum LibspotError err, char * buffer, unsigned long size)

Return a string related to an error code.

Parameter Description
err error code
buffer input buffer to fill with
size size of the input buffer