# Operators¶

## Pre-defined¶

All Base julia operators that take 1 or 2 float32 as input, and output a float32 as output, are available. A selection of these and other valid operators are stated below.

**Binary**

`+`

, `-`

, `*`

, `/`

, `^`

, `greater`

, `mod`

, `logical_or`

,
`logical_and`

**Unary**

`neg`

,
`square`

,
`cube`

,
`exp`

,
`abs`

,
`log`

,
`log10`

,
`log2`

,
`log1p`

,
`sqrt`

,
`sin`

,
`cos`

,
`tan`

,
`sinh`

,
`cosh`

,
`tanh`

,
`atan`

,
`asinh`

,
`acosh`

,
`atanh_clip`

(=atanh((x+1)%2 - 1)),
`erf`

,
`erfc`

,
`gamma`

,
`relu`

,
`round`

,
`floor`

,
`ceil`

,
`round`

,
`sign`

.

## Custom¶

Instead of passing a predefined operator as a string,
you can define with by passing it to the `pysr`

function, with, e.g.,

```
PySRRegressor(
...,
unary_operators=["myfunction(x) = x^2"],
binary_operators=["myotherfunction(x, y) = x^2*y"]
)
```

Make sure that it works with
`Float32`

as a datatype. That means you need to write `1.5f3`

instead of `1.5e3`

, if you write any constant numbers.

Your operator should work with the entire real line (you can use
abs(x) for operators requiring positive input - see `log_abs`

); otherwise
the search code will experience domain errors.