Source code for solrat.engine.functions.special

from typing import TypeVar

import numpy as np

from solrat.engine.functions.decorators import log_function

FloatOrNDArrayT = TypeVar("FloatOrNDArrayT", float, np.ndarray)
IntOrFloatT = TypeVar("IntOrFloatT", int, float)
NumericT = TypeVar("NumericT", int, float, complex, np.ndarray)


[docs] @log_function def pseudo_hash(stokesI, stokesQ, stokesU, stokesV): """ Construct a pseudo-unique, likely non-trivial real float hash from 4 complex arrays """ if stokesI.shape[0] % 2 == 1: stokesI = stokesI[:-1] + stokesI[-1] stokesQ = stokesQ[:-1] + stokesQ[-1] stokesU = stokesU[:-1] + stokesU[-1] stokesV = stokesV[:-1] + stokesV[-1] result = stokesI[::2] + stokesI[1::2] * 0.7 result += stokesQ[::2] * 0.97 + stokesQ[1::2] * 0.77 result += stokesU[::2] * 0.87 + stokesU[1::2] * 0.57 result += stokesV[::2] * 0.77 + stokesV[1::2] * 0.37 result = np.real(result) + np.imag(result) * 0.75 return np.mean(result)