# RealDot

This package only contains and exports a single function `realdot(x, y)`

.
It computes `real(LinearAlgebra.dot(x, y))`

while avoiding computing the imaginary part of `LinearAlgebra.dot(x, y)`

if possible.

The real dot product is useful when one treats complex numbers as embedded in a real vector space.
For example, take two complex arrays `x`

and `y`

.
Their real dot product is `real(dot(x, y)) == dot(real(x), real(y)) + dot(imag(x), imag(y))`

.
This is the same result one would get by reinterpreting the arrays as real arrays:

```
xreal = reinterpret(real(eltype(x)), x)
yreal = reinterpret(real(eltype(y)), y)
real(dot(x, y)) == dot(xreal, yreal)
```

In particular, this function can be useful if you define pullbacks for non-holomorphic functions (see e.g. this discussion in the ChainRulesCore.jl repo).
It was implemented initially in ChainRules.jl in this PR as `_realconjtimes`

.