Пример #1
0
    def __flex_load__(cls, header, data):
        ext = MultipleDataExtension._parse(header, data)

        wavelength = ext.data["wavelength"]
        wavelength = wavelength << ext.header["wavelength_unit"]

        flux = ext.data["flux"]
        flux = flux << ext.header["flux_unit"]

        if "uncertainty" in ext.data:
            uncertainty = ext.data["uncertainty"]
            uncertainty = uncertainty << ext.header["uncertainty_unit"]
            uncertainty = StdDevUncertainty(uncertainty)
        else:
            uncertainty = None

        exceptions = [
            "__module__",
            "__class__",
            "__header__",
            "uncertainty_unit",
            "wavelength_unit",
            "flux_unit",
        ]
        meta = {k: v for k, v in ext.header.items() if k not in exceptions}
        meta["spectral_axis"] = wavelength
        meta["flux"] = flux
        meta["uncertainty"] = uncertainty

        return cls(**meta)
Пример #2
0
def test_json_multi(tmp_fname):
    file = FlexFile()
    ext = MultipleDataExtension(data={"bla": np.zeros(10)})
    file.extensions["img"] = ext

    file.to_json(tmp_fname)

    del file
    f2 = FlexFile.from_json(tmp_fname)

    assert f2["img"].data["bla"].size == 10
    assert np.all(f2["img"].data["bla"] == 0)
Пример #3
0
    def __flex_save__(self):
        header = self.meta
        header["wavelength_unit"] = self.wavelength.unit
        header["flux_unit"] = self.flux.unit
        data = {
            "wavelength": self.wavelength.to_value("AA"),
            "flux": self.flux.to_value(1),
        }
        if self.uncertainty is not None:
            header["uncertainty_unit"] = self.uncertainty.unit
            data["uncertainty"] = self.uncertainty.array

        module = self.__class__.__module__
        cls = self.__class__.__name__
        ext = MultipleDataExtension(header, data, cls=f"{module}.{cls}")
        return ext
Пример #4
0
    def _save(self):
        data = {}
        ext2 = self.abund._save()
        header = ext2.header
        data["abund"] = ext2.data
        header["abund_format"] = header["type"]
        del header["type"]

        for name in self._names:
            value = self[name]
            if isinstance(value, (float, int, str)):
                header[name] = value
            elif isinstance(value, np.ndarray):
                data[name] = value
            elif value is None or isinstance(value, Abund):
                pass
            else:
                raise ValueError("What is this? %s" % value)

        ext = MultipleDataExtension(header, data)

        return ext
Пример #5
0
    def _save(self):
        data = {}
        ext2 = self.abund._save()
        header = ext2.header
        data["abund"] = ext2.data
        header["abund_format"] = header["type"]
        del header["type"]

        for name in self._names:
            value = self[name]

            if isinstance(value, np.ndarray):
                data[name] = value
            elif value is None or isinstance(value, Abund):
                pass
            else:
                # if isinstance(value, (np.floating, np.integer, np.str, float, int, str)):
                header[name] = value

        ext = MultipleDataExtension(header, data)

        return ext
Пример #6
0
import numpy as np
import pandas as pd
from flex.flex import FlexFile
from flex.extensions.bindata import BinaryDataExtension, MultipleDataExtension
from flex.extensions.tabledata import TableExtension, JSONTableExtension

file = FlexFile()

ext_bin = BinaryDataExtension(data=np.linspace(0, 1, 4 * 3 * 2).reshape((4, 3,
                                                                         2)))

ext = MultipleDataExtension()
ext.data["data"] = np.arange(12, dtype="i2").reshape((3, 2, 2))

tab = JSONTableExtension()
tab.data = pd.DataFrame(np.arange(20).reshape((10, 2)), columns=["A", "B"])

file.header["bla"] = np.float(3e10)
file.header["blub"] = np.nan
file.header["blrub"] = float("inf")
file.header["blurb"] = np.array([1, 2, 3])
file.header["blurb2"] = [1, 2, 3]
file.header["int"] = 1
file.header["np_int"] = np.int(1)
file.header["str"] = "Hello"
file.header["np_str"] = np.str("World")
# FITS can handle either long header keys, or long entries
# But not both at the same time...
file.header["really_long_entry"] = "bla"
file.header["really_l"] = "bla" * 100
file.header["really_long_text_with_HIERARCH"] = "bla" * 100
Пример #7
0
 def _save(self):
     data = {str(i): v for i, v in enumerate(self._values)}
     ext = MultipleDataExtension(data=data)
     return ext