Source code for feets.extractors.light_curve_extractor
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (c) 2017-2024, Cabral, Juan
# Copyright (c) 2025, QuatroPe; ClariĆ”, Felipe
# License: MIT
# Full Text:
# https://github.com/quatrope/feets/blob/master/LICENSE
# =============================================================================
# DOC
# =============================================================================
"""Abstract class for `light_curve` compatible extractors."""
# =============================================================================
# IMPORTS
# =============================================================================
import numpy as np
from .extractor import (
DATA_ERROR,
DATA_FLUX,
DATA_FLUX_ERROR,
DATA_MAGNITUDE,
DATA_TIME,
Extractor,
)
from ..libs import doctools
__all__ = ["LightCurveExtractor"]
# =============================================================================
# CONSTANTS
# =============================================================================
DEFAULT_DTYPE = np.float64
DATAS_TIME = {DATA_TIME}
DATAS_BRIGHTNESS = {DATA_MAGNITUDE, DATA_FLUX}
DATAS_ERROR = {DATA_ERROR, DATA_FLUX_ERROR}
DATAS = DATAS_TIME.union(DATAS_BRIGHTNESS, DATAS_ERROR)
# =============================================================================
# LIGHT CURVE EXTRACTOR CLASS
# =============================================================================
[docs]
class LightCurveExtractor(Extractor):
"""Abstract class for `light_curve` compatible extractors."""
@doctools.doc_inherit(Extractor.__init_subclass__)
def __init_subclass__(cls):
super().__init_subclass__()
# API =====================================================================
[docs]
@classmethod
@doctools.doc_inherit(Extractor.prepare_extract)
def prepare_extract(cls, data, dependencies):
# validate and select relevant data and dependencies
kwargs = super().prepare_extract(data, dependencies)
shape = next((len(kwargs[k]) for k in kwargs if k in DATAS), 0)
processed_kwargs = {}
# select dependencies
for d in cls.get_dependencies():
processed_kwargs[d] = kwargs[d]
# select and format data
for d in cls.get_data():
if d in DATAS_TIME:
processed_kwargs[d] = (
np.arange(shape, dtype=DEFAULT_DTYPE)
if kwargs.get(d) is None
else np.array(kwargs.get(d), dtype=DEFAULT_DTYPE)
)
if d in DATAS_BRIGHTNESS:
processed_kwargs[d] = (
np.zeros(shape, dtype=DEFAULT_DTYPE)
if kwargs.get(d) is None
else np.array(kwargs.get(d), dtype=DEFAULT_DTYPE)
)
if d in DATAS_ERROR:
processed_kwargs[d] = (
np.ones(shape, dtype=DEFAULT_DTYPE)
if kwargs.get(d) is None
else 1 / np.array(kwargs.get(d), dtype=DEFAULT_DTYPE) ** 2
)
return processed_kwargs