Source code for africanus.experimental.rime.fused.transformers.lm

import numpy as np

from africanus.experimental.rime.fused.transformers.core import Transformer


[docs] class LMTransformer(Transformer): OUTPUTS = ["lm"] def init_fields(self, typingctx, init_state, radec, phase_dir): dt = typingctx.unify_types(radec.dtype, phase_dir.dtype) fields = [("lm", dt[:, :])] def lm(init_state, radec, phase_dir): lm = np.empty_like(radec) pc_ra = phase_dir[0] pc_dec = phase_dir[1] sin_pc_dec = np.sin(pc_dec) cos_pc_dec = np.cos(pc_dec) for s in range(radec.shape[0]): da = radec[s, 0] - pc_ra sin_ra_delta = np.sin(da) cos_ra_delta = np.cos(da) sin_dec = np.sin(radec[s, 1]) cos_dec = np.cos(radec[s, 1]) lm[s, 0] = cos_dec * sin_ra_delta lm[s, 1] = sin_dec * cos_pc_dec - cos_dec * sin_pc_dec * cos_ra_delta return lm return fields, lm def dask_schema(self, radec, phase_dir): assert radec.ndim == 2 assert phase_dir.ndim == 1 inputs = {"radec": ("source", "radec"), "phase_dir": ("radec",)} outputs = {"lm": np.empty((0, 0), dtype=radec.dtype)} return inputs, outputs