import numpy as np
smear_function_table = {}
[docs]
def register_weight_smear(name):
def _f(f):
global smear_function_table
smear_function_table[name] = f
return f
return _f
[docs]
def get_weight_smear(name):
if isinstance(name, dict):
name = name["name"]
return smear_function_table[name]
[docs]
@register_weight_smear("Poisson")
def poisson_smear(weight, **kwargs):
return weight * np.random.poisson(size=weight.shape[0])
[docs]
@register_weight_smear("Dirichlet")
def dirichlet_smear(weight, **kwargs):
return weight * np.random.dirichlet(weight) * np.sum(weight)
[docs]
@register_weight_smear("Gamma")
def gamma_smear(weight, **kwargs):
return weight * np.random.gamma(1, size=weight.shape[0])