**This is an old revision of the document!**

## What is TimEL

TimEL is a Java library to parse and evaluate discreet time mathematical expressions, that is expressions whose operands change over time.

TimEL's aim is to help developing highly customisable applications allowing, and simplifying, the evaluation of time dependant formulas, bringing added value in many areas and markets like:

- Financial
- Smart Metering

The basic concept underlying TimEL design is that a given variable, let's say A, can be approximated over time with a finite number of measures (through a discretization process) and then defined as follows:

A = k_{i} for t: t_{i} ≤ t < t_{i + 1};

Note that k_{i} is a constant value in the range [a_{i}, b_{i+1}) and that the interval duration depends on the sampling frequency of the discretization process, but TimEL does not make any assumption regarding the duration of intervals: both constant-duration and irregular intervals are accepted.

The explicit reference to the interval underlying the validity of a value allows TimEL to clearly identify the undefined intervals - that is time intervals where the value is not available (or maybe just not available yet, for queue systems).

This approach is suitable to express a number of various processes, as example:

- The value of a stock quote for a given period;
- The consumption read by a meter reading for a given period;
- An average speed for the given interval for a given period.

Below an example of TimEL code to evaluate A + B with the following values:

As you can see, TimEL will split A in the interval [April, October) as B has a value change in July, keeping thus the highest granularity possible resampling the input when needed.

Note that the resampling process behaves differently on the data type, for more information checkout Interpolation.

TimEL's expressivity comes mainly form the ability of model time recurrent events with a number of specific aggregation functions.

As the data type is very important since it affects the computation, multiple resample functions are available to support both rescale and data type conversion on the fly when needed.

The following basic function are available:

Each of these functions receive the value to resample as first argument, and can be used with an optional 2nd argument which is the temporal interval to which the resample should be applied.

Note that the temporal interval may be a fixed (defined using the Interval function) or a recurring one (defined using the Every function).

When no interval is provided, an aggregation function will produce a single output with the longest interval possible.

Follows an example of the following function, evaluated in the interval 2015-01-01 to 2015-02-01 (we use the ISO format to avoid confusion):