Source code for liesel_gam.names

from dataclasses import dataclass, field


[docs] @dataclass class NameManager: """ Creates unique names. """ prefix: str = "" """Added to names.""" created_names: dict[str, int] = field(default_factory=dict) """Dictionary created names."""
[docs] def create(self, name: str, apply_prefix: bool = True, lazy: bool = True) -> str: """ Appends a counter to the given name for uniqueness. There is an individual counter for each name. If a prefix was passed to the builder on init, the prefix is applied to the name. """ if apply_prefix: name = self.prefix + name i = self.created_names.get(name, 0) if i > 0 and lazy: name_indexed = name + str(i) else: name_indexed = name self.created_names[name] = i + 1 return name_indexed
[docs] def fname(self, f: str, of: str) -> str: """Creates a function name ``{f}({of})``.""" return self.create(f"{f}({of})")
[docs] def param( self, param_name: str, term_name: str = "", ) -> str: """Creates a parameter name ``${param_name}_{term_name}$``.""" param_name = param_name.replace("$", "") if term_name: term_name = term_name.replace("$", "") param_name = f"${param_name}" + "_{" + f"{term_name}" + "}$" # apply_prefix false, because the assumption is that any prefix will be # present in the term name already return self.create(param_name, apply_prefix=False) else: param_name = f"${param_name}$" return self.create(param_name, apply_prefix=True)
[docs] def beta(self, term_name: str = "") -> str: """Creates a beta parameter name ``$\\beta_{term_name}$``.""" return self.param(term_name=term_name, param_name="\\beta")
[docs] def tau(self, term_name: str = "") -> str: """Creates a tau parameter name ``$\\tau_{term_name}$``.""" return self.param(term_name=term_name, param_name="\\tau")
[docs] def tau2(self, term_name: str = "") -> str: """Creates a tau2 parameter name ``$\\tau^2_{term_name}$``.""" return self.param(term_name=term_name, param_name="\\tau^2")