Source code for formulas.functions.comp

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
# Copyright 2016-2026 European Commission (JRC);
# Licensed under the EUPL (the 'Licence');
# You may not use this work except in compliance with the Licence.
# You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl

"""
Python equivalents of compatibility Excel functions.
"""
from . import Error, _convert_args, FoundError
from .stat import (
    FUNCTIONS as FSTAT, _convert_args, wrap_ufunc, xbetadist, xhypergeom_dist,
    xt_dist2t, xt_distrt, xlognormdist, xnegbinomdist
)

FUNCTIONS = {
    'BETAINV': FSTAT['BETA.INV'],
    'BINOMDIST': FSTAT['BINOM.DIST'],
    'CHIDIST': FSTAT['CHISQ.DIST.RT'],
    'CHIINV': FSTAT['CHISQ.INV.RT'],
    'CHITEST': FSTAT['CHISQ.TEST'],
    'CHIDIST': FSTAT['CHISQ.DIST.RT'],
    'CONFIDENCE': FSTAT['CONFIDENCE.NORM'],
    'COVAR': FSTAT['COVARIANCE.P'],
    'CRITBINOM': FSTAT['BINOM.INV'],
    'EXPONDIST': FSTAT['EXPON.DIST'],
    'FDIST': FSTAT['F.DIST.RT'],
    'FINV': FSTAT['F.INV.RT'],
    'FTEST': FSTAT['F.TEST'],
    'GAMMADIST': FSTAT['GAMMA.DIST'],
    'GAMMAINV': FSTAT['GAMMA.INV'],
    'LOGINV': FSTAT['LOGNORM.INV'],
    'MODE': FSTAT['MODE.SNGL'],
    'NORMDIST': FSTAT['NORM.DIST'],
    'NORMINV': FSTAT['NORM.INV'],
    'NORMSDIST': FSTAT['NORM.S.DIST'],
    'NORMSINV': FSTAT['NORM.S.INV'],
    'PERCENTILE': FSTAT['PERCENTILE.INC'],
    'PERCENTRANK': FSTAT['PERCENTRANK.INC'],
    'POISSON': FSTAT['POISSON.DIST'],
    'QUARTILE': FSTAT['QUARTILE.INC'],
    'RANK': FSTAT['RANK.EQ'],
    'STDEV': FSTAT['STDEV.S'],
    'STDEVP': FSTAT['STDEV.P'],
    'TINV': FSTAT['T.INV.2T'],
    'TTEST': FSTAT['T.TEST'],
    'VAR': FSTAT['VAR.S'],
    'VARP': FSTAT['VAR.P'],
    'WEIBULL': FSTAT['WEIBULL.DIST'],
    'ZTEST': FSTAT['Z.TEST']
}
FUNCTIONS['BETADIST'] = wrap_ufunc(
    xbetadist,
    input_parser=lambda *a: tuple(
        map(_convert_args, a[:3])
    ) + (1,) + tuple(map(_convert_args, a[3:]))
)
FUNCTIONS['HYPGEOMDIST'] = wrap_ufunc(
    xhypergeom_dist, input_parser=lambda *a: tuple(map(_convert_args, a)) + (0,)
)
FUNCTIONS['LOGNORMDIST'] = wrap_ufunc(
    xlognormdist, input_parser=lambda *a: tuple(map(_convert_args, a))
)
FUNCTIONS['NEGBINOMDIST'] = wrap_ufunc(
    xnegbinomdist, input_parser=lambda *a: tuple(map(_convert_args, a)) + (0,)
)


[docs] def xtdist(x, deg_freedom, tails): tails = int(tails) if tails == 1: return xt_distrt(x, deg_freedom) elif tails == 2: return xt_dist2t(x, deg_freedom) raise FoundError(err=Error.errors['#NUM!'])
FUNCTIONS['TDIST'] = wrap_ufunc( xtdist, input_parser=lambda *a: tuple(map(_convert_args, a)) )