# Math functions#

On top of the functions listed below, measures can also be combined with mathematical operators.

• The classic `+`, `-` and `*` operators:

```>>> df = pd.DataFrame(
...     columns=["City", "A", "B", "C", "D"],
...     data=[
...         ("Berlin", 15.0, 10.0, 10.1, 1.0),
...         ("London", 24.0, 16.0, 20.5, 3.14),
...         ("New York", -27.0, 15.0, 30.7, 10.0),
...         ("Paris", 0.0, 0.0, 0.0, 0.0),
...     ],
... )
>>> table = session.read_pandas(df, keys=["City"], table_name="Math")
>>> cube = session.create_cube(table)
>>> l, m = cube.levels, cube.measures
>>> m["Sum"] = m["A.SUM"] + m["B.SUM"]
>>> m["Subtract"] = m["A.SUM"] - m["B.SUM"]
>>> m["Multiply"] = m["A.SUM"] * m["B.SUM"]
>>> cube.query(
...     m["A.SUM"],
...     m["B.SUM"],
...     m["Sum"],
...     m["Subtract"],
...     m["Multiply"],
...     levels=[l["City"]],
... )
A.SUM  B.SUM     Sum Subtract Multiply
City
Berlin     15.00  10.00   25.00     5.00   150.00
London     24.00  16.00   40.00     8.00   384.00
New York  -27.00  15.00  -12.00   -42.00  -405.00
Paris        .00    .00     .00      .00      .00
```
• The float division `/` and integer division `//`:

```>>> m["Float division"] = m["A.SUM"] / m["B.SUM"]
>>> m["Int division"] = m["A.SUM"] // m["B.SUM"]
>>> cube.query(
...     m["A.SUM"],
...     m["B.SUM"],
...     m["Float division"],
...     m["Int division"],
...     levels=[l["City"]],
... )
A.SUM  B.SUM Float division Int division
City
Berlin     15.00  10.00           1.50         1.00
London     24.00  16.00           1.50         1.00
New York  -27.00  15.00          -1.80        -2.00
Paris        .00    .00            NaN          NaN
```
• The exponentiation `**`:

```>>> m["a²"] = m["A.SUM"] ** 2
>>> cube.query(m["A.SUM"], m["a²"], levels=[l["City"]])
A.SUM      a²
City
Berlin     15.00  225.00
London     24.00  576.00
New York  -27.00  729.00
Paris        .00     .00
```
• The modulo `%`:

```>>> m["Modulo"] = m["A.SUM"] % m["B.SUM"]
>>> cube.query(m["A.SUM"], m["B.SUM"], m["Modulo"], levels=[l["City"]])
A.SUM  B.SUM Modulo
City
Berlin     15.00  10.00   5.00
London     24.00  16.00   8.00
New York  -27.00  15.00   3.00
Paris        .00    .00    NaN
```
 `abs` Return a measure equal to the absolute value of the passed measure. `ceil` Return a measure equal to the smallest integer that is >= to the passed measure. `cos` Return a measure equal to the cosine of the passed measure in radians. `erf` Return the error function of the input measure. `erfc` Return the complementary error function of the input measure. `exp` Return a measure equal to the exponential value of the passed measure. `floor` Return a measure equal to the largest integer <= to the passed measure. `isnan` Return a measure equal to `True` when the passed measure is `NaN` and to `False` otherwise. `log` Return a measure equal to the natural logarithm (base e) of the passed measure. `log10` Return a measure equal to the base 10 logarithm of the passed measure. `max` Return a measure equal to the maximum of the passed arguments. `min` Return a measure equal to the minimum of the passed arguments. `round` Return a measure equal to the closest integer to the passed measure. `sin` Return a measure equal to the sine of the passed measure in radians. `sqrt` Return a measure equal to the square root of the passed measure. `tan` Return a measure equal to the tangent of the passed measure in radians.