Exemplo n.º 1
0
    @mean.setter
    def mean(self, mean):
        self._mean = mean

    @property
    def std(self):
        return self._std

    @std.setter
    def std(self, std):
        self._std = std

    def rescale(self, x):
        return gbkfit.math.gauss_trunc_1d_ppf(x, self.mean, self.std,
                                              self.minimum, self.maximum)

    def prob(self, x):
        return gbkfit.math.gauss_trunc_1d_pdf(x, self.mean, self.std,
                                              self.minimum, self.maximum)

    def cdf(self, x):
        return gbkfit.math.gauss_trunc_1d_cdf(x, self.mean, self.std,
                                              self.minimum, self.maximum)


prior_parser = parseutils.TypedParser(Prior)

prior_parser.register(PriorUniform)
prior_parser.register(PriorGauss)
Exemplo n.º 2
0
Arquivo: core.py Projeto: bek0s/gbkfit
    def enames(self, fixed=True, tied=True, free=True):
        return self._interpreter.enames(fixed=fixed, tied=tied, free=free)

    def evaluate(self, in_eparams, out_eparams=None, check=True):
        return self._interpreter.evaluate(in_eparams, out_eparams, check)


class Fitter(parseutils.TypedParserSupport, abc.ABC):
    @staticmethod
    @abc.abstractmethod
    def load_params(info, desc):
        pass

    def __init__(self, *args, **kwargs):
        pass

    def fit(self, objectives, parameters):
        if missing := set(objectives.pdescs()).difference(parameters.pdescs()):
            raise RuntimeError(
                f"fitting cannot start because information for the following "
                f"parameters is missing: {missing}")
        result = self._fit_impl(objectives, parameters)
        return result

    @abc.abstractmethod
    def _fit_impl(self, objective, params):
        pass


fitter_parser = parseutils.TypedParser(Fitter)
Exemplo n.º 3
0
    def __iter__(self):
        return self._pdescs.__iter__()

    def __len__(self):
        return self._pdescs.__len__()

    def __repr__(self):
        return self._pdescs.__repr__()

    def __str__(self):
        return self._pdescs.__str__()


def load_pdescs_dict(info):
    pdescs = {}
    for key, val in info.items():
        pdescs[key] = pdesc_parser.load(dict(name=key) | val)
    return pdescs


def dump_pdescs_dict(pdescs):
    info = {key: pdesc_parser.dump(val) for key, val in pdescs.items()}
    for val in info.values():
        del val['name']
    return info


pdesc_parser = parseutils.TypedParser(ParamDesc)
pdesc_parser.register(ParamScalarDesc)
pdesc_parser.register(ParamVectorDesc)
Exemplo n.º 4
0
from gbkfit.model.core import GModelImage
from gbkfit.utils import iterutils, parseutils
from . import _detail
from .core import DensityComponent2D
from .density_smdisk_2d import DensitySMDisk2D

__all__ = ['GModelIntensity2D']

_dcmp_parser = parseutils.TypedParser(DensityComponent2D)
_dcmp_parser.register(DensitySMDisk2D)


class GModelIntensity2D(GModelImage):
    @staticmethod
    def type():
        return 'intensity_2d'

    @classmethod
    def load(cls, info):
        desc = parseutils.make_typed_desc(cls, 'gmodel')
        opts = parseutils.parse_options_for_callable(info, desc, cls.__init__)
        opts.update(components=_dcmp_parser.load(info['components']))
        return cls(**opts)

    def dump(self):
        return dict(type=self.type(), components=_dcmp_parser.dump(self._cmps))

    def __init__(self, components):
        self._cmps = iterutils.tuplify(components)
        self._size = [None, None]
        self._wcube = None
Exemplo n.º 5
0
from gbkfit.model.core import GModelSCube
from gbkfit.utils import iterutils, parseutils
from . import _detail
from .core import DensityComponent3D, SpectralComponent3D
from .density_mcdisk_3d import DensityMCDisk3D
from .density_smdisk_3d import DensitySMDisk3D
from .spectral_mcdisk_3d import SpectralMCDisk3D
from .spectral_smdisk_3d import SpectralSMDisk3D

__all__ = ['GModelKinematics3D']

_dcmp_parser = parseutils.TypedParser(DensityComponent3D)
_scmp_parser = parseutils.TypedParser(SpectralComponent3D)
_dcmp_parser.register(DensityMCDisk3D)
_dcmp_parser.register(DensitySMDisk3D)
_scmp_parser.register(SpectralMCDisk3D)
_scmp_parser.register(SpectralSMDisk3D)


class GModelKinematics3D(GModelSCube):
    @staticmethod
    def type():
        return 'kinematics_3d'

    @classmethod
    def load(cls, info):
        desc = parseutils.make_typed_desc(cls, 'gmodel')
        opts = parseutils.parse_options_for_callable(info, desc, cls.__init__)
        opts.update(components=_scmp_parser.load(info['components']),
                    tcomponents=_dcmp_parser.load(info.get('tcomponents')))
        return cls(**opts)
Exemplo n.º 6
0
    @staticmethod
    def type():
        return 'crange'

    @staticmethod
    def uid():
        return JP_TRAIT_UID_CRANGE

    def __init__(self, angle):
        Trait.__init__(self, angle=angle)


# Density traits (polar) parser
rpt_parser = parseutils.TypedParser(RPTrait, [
    RPTraitUniform, RPTraitExponential, RPTraitGauss, RPTraitGGauss,
    RPTraitLorentz, RPTraitMoffat, RPTraitSech2, RPTraitMixtureGGauss,
    RPTraitMixtureMoffat, RPTraitNWUniform, RPTraitNWHarmonic,
    RPTraitNWDistortion
])

# Density traits (height) parser
rht_parser = parseutils.TypedParser(RHTrait, [
    RHTraitUniform, RHTraitExponential, RHTraitGauss, RHTraitGGauss,
    RHTraitLorentz, RHTraitSech2
])

# Velocity traits (polar) parser
vpt_parser = parseutils.TypedParser(VPTrait, [
    VPTraitTanUniform, VPTraitTanArctan, VPTraitTanBoissier, VPTraitTanEpinat,
    VPTraitTanLRamp, VPTraitTanTanh, VPTraitTanPolyex, VPTraitTanRix,
    VPTraitNWTanUniform, VPTraitNWTanHarmonic, VPTraitNWRadUniform,
    VPTraitNWRadHarmonic, VPTraitNWVerUniform, VPTraitNWVerHarmonic,
Exemplo n.º 7
0
        pass


class GModel(parseutils.TypedParserSupport, abc.ABC):

    @abc.abstractmethod
    def params(self):
        pass


class GModelImage(GModel, abc.ABC):

    @abc.abstractmethod
    def evaluate_image(
            self, driver, params, image, weights, size, step, zero, rota, dtype,
            out_extra):
        pass


class GModelSCube(GModel, abc.ABC):

    @abc.abstractmethod
    def evaluate_scube(
            self, driver, params, scube, weights, size, step, zero, rota, dtype,
            out_extra):
        pass


dmodel_parser = parseutils.TypedParser(DModel)
gmodel_parser = parseutils.TypedParser(GModel)
Exemplo n.º 8
0
from gbkfit.model.core import GModelSCube
from gbkfit.utils import iterutils, parseutils
from . import _detail
from .core import SpectralComponent2D
from .spectral_smdisk_2d import SpectralSMDisk2D

__all__ = ['GModelKinematics2D']

_scmp_parser = parseutils.TypedParser(SpectralComponent2D)
_scmp_parser.register(SpectralSMDisk2D)


class GModelKinematics2D(GModelSCube):
    @staticmethod
    def type():
        return 'kinematics_2d'

    @classmethod
    def load(cls, info):
        desc = parseutils.make_typed_desc(cls, 'gmodel')
        opts = parseutils.parse_options_for_callable(info, desc, cls.__init__)
        opts.update(components=_scmp_parser.load(info['components']))
        return cls(**opts)

    def dump(self):
        return dict(type=self.type(), components=_scmp_parser.dump(self._cmps))

    def __init__(self, components):
        self._cmps = iterutils.tuplify(components)
        self._size = [None, None]
        self._wcube = None
Exemplo n.º 9
0
Arquivo: core.py Projeto: bek0s/gbkfit
        pass

    @abc.abstractmethod
    def dump(self, *args, **kwargs):
        pass

    def size(self, step, offset=(0, 0)):
        size = self._size_impl(step)
        return (int(gbkfit.math.roundu_odd(size[0] + offset[0])),
                int(gbkfit.math.roundu_odd(size[1] + offset[1])))

    def asarray(self, step, size=None, offset=(0, 0)):
        if size is None:
            size = self.size(step, offset)
        if any(gbkfit.math.is_even(s + o) for s, o in zip(size, offset)):
            raise RuntimeError(
                f"size ({size}) + offset ({offset}) must be odd")
        return self._asarray_impl(step, size, offset)

    @abc.abstractmethod
    def _size_impl(self, step):
        pass

    @abc.abstractmethod
    def _asarray_impl(self, step, size, offset):
        pass


lsf_parser = parseutils.TypedParser(LSF)
psf_parser = parseutils.TypedParser(PSF)
Exemplo n.º 10
0
        return 'mh'

    def __init__(self, proposal_function, ndim=None):
        super().__init__(emcee.moves.MHMove, copy.deepcopy(locals()))


class FitterEmceeMoveGaussian(FitterEmceeMove):
    @staticmethod
    def type():
        return 'gauss'

    def __init__(self, cov, mode='vector', factor=None):
        super().__init__(emcee.moves.GaussianMove, copy.deepcopy(locals()))


move_parser = parseutils.TypedParser(FitterEmceeMove)
move_parser.register(FitterEmceeMoveStretch)
move_parser.register(FitterEmceeMoveWalk)
move_parser.register(FitterEmceeMoveKDE)
move_parser.register(FitterEmceeMoveDE)
move_parser.register(FitterEmceeMoveDESnooker)
move_parser.register(FitterEmceeMoveMH)
move_parser.register(FitterEmceeMoveGaussian)


def load_moves_with_weights(info):
    moves = iterutils.tuplify(info, False)
    weights = [move.pop('weight', 1) for move in moves]
    moves = move_parser.load(moves)
    return tuple(zip(moves, weights))
Exemplo n.º 11
0
Arquivo: core.py Projeto: bek0s/gbkfit
    @abc.abstractmethod
    def math_sum(self, x, out=None):
        pass

    @abc.abstractmethod
    def math_add(self, x1, x2, out=None):
        pass

    @abc.abstractmethod
    def math_sub(self, x1, x2, out=None):
        pass

    @abc.abstractmethod
    def math_mul(self, x1, x2, out=None):
        pass

    @abc.abstractmethod
    def math_div(self, x1, x2, out=None):
        pass

    @abc.abstractmethod
    def math_pow(self, x1, x2, out=None):
        pass

    @abc.abstractmethod
    def backend(self):
        pass


driver_parser = parseutils.TypedParser(Driver)