From b33a31da390b6a9f8989be578e0050251fd0e6b4 Mon Sep 17 00:00:00 2001 From: Thomas Wiecki Date: Tue, 18 Dec 2018 13:45:43 +0100 Subject: [PATCH] ENH Allow passing of greek unicode symbols to specificy variable names. --- pymc3/distributions/distribution.py | 8 +++++ pymc3/distributions/greek_alphabet.py | 52 +++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 pymc3/distributions/greek_alphabet.py diff --git a/pymc3/distributions/distribution.py b/pymc3/distributions/distribution.py index 0dcb6bdb48..fd45312409 100644 --- a/pymc3/distributions/distribution.py +++ b/pymc3/distributions/distribution.py @@ -11,6 +11,7 @@ ObservedRV, MultiObservedRV, Context, InitContextMeta ) from ..vartypes import string_types +from .greek_alphabet import greek_alphabet __all__ = ['DensityDist', 'Distribution', 'Continuous', 'Discrete', 'NoDistribution', 'TensorType', 'draw_values', 'generate_samples'] @@ -38,6 +39,13 @@ def __new__(cls, name, *args, **kwargs): if isinstance(data, ObservedRV) or isinstance(data, FreeRV): raise TypeError("observed needs to be data but got: {}".format(type(data))) total_size = kwargs.pop('total_size', None) + + # convert greek unicode kwargs to ascii + for k, v in kwargs.items(): + if k in greek_alphabet.keys(): + kwargs[greek_alphabet[k]] = v + kwargs.pop(k) + dist = cls.dist(*args, **kwargs) return model.Var(name, dist, data, total_size) else: diff --git a/pymc3/distributions/greek_alphabet.py b/pymc3/distributions/greek_alphabet.py new file mode 100644 index 0000000000..14e4a588fb --- /dev/null +++ b/pymc3/distributions/greek_alphabet.py @@ -0,0 +1,52 @@ +# Taken from https://gist.github.com/beniwohli/765262 + +greek_alphabet = { + u'\u0391': 'Alpha', + u'\u0392': 'Beta', + u'\u0393': 'Gamma', + u'\u0394': 'Delta', + u'\u0395': 'Epsilon', + u'\u0396': 'Zeta', + u'\u0397': 'Eta', + u'\u0398': 'Theta', + u'\u0399': 'Iota', + u'\u039A': 'Kappa', + u'\u039B': 'Lamda', + u'\u039C': 'Mu', + u'\u039D': 'Nu', + u'\u039E': 'Xi', + u'\u039F': 'Omicron', + u'\u03A0': 'Pi', + u'\u03A1': 'Rho', + u'\u03A3': 'Sigma', + u'\u03A4': 'Tau', + u'\u03A5': 'Upsilon', + u'\u03A6': 'Phi', + u'\u03A7': 'Chi', + u'\u03A8': 'Psi', + u'\u03A9': 'Omega', + u'\u03B1': 'alpha', + u'\u03B2': 'beta', + u'\u03B3': 'gamma', + u'\u03B4': 'delta', + u'\u03B5': 'epsilon', + u'\u03B6': 'zeta', + u'\u03B7': 'eta', + u'\u03B8': 'theta', + u'\u03B9': 'iota', + u'\u03BA': 'kappa', + u'\u03BB': 'lamda', + u'\u03BC': 'mu', + u'\u03BD': 'nu', + u'\u03BE': 'xi', + u'\u03BF': 'omicron', + u'\u03C0': 'pi', + u'\u03C1': 'rho', + u'\u03C3': 'sigma', + u'\u03C4': 'tau', + u'\u03C5': 'upsilon', + u'\u03C6': 'phi', + u'\u03C7': 'chi', + u'\u03C8': 'psi', + u'\u03C9': 'omega', +}