PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/thorium/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/thorium/calc.py |
""" Used to manage the thorium register. The thorium register is where compound values are stored and computed, such as averages etc. .. versionadded:: 2016.11.0 :depends: statistics PyPi module """ try: import statistics HAS_STATS = True except ImportError: HAS_STATS = False def __virtual__(): """ The statistics module must be pip installed """ return HAS_STATS def calc(name, num, oper, minimum=0, maximum=0, ref=None): """ Perform a calculation on the ``num`` most recent values. Requires a list. Valid values for ``oper`` are: - add: Add last ``num`` values together - mul: Multiple last ``num`` values together - mean: Calculate mean of last ``num`` values - median: Calculate median of last ``num`` values - median_low: Calculate low median of last ``num`` values - median_high: Calculate high median of last ``num`` values - median_grouped: Calculate grouped median of last ``num`` values - mode: Calculate mode of last ``num`` values USAGE: .. code-block:: yaml foo: calc.calc: - name: myregentry - num: 5 - oper: mean """ ret = {"name": name, "changes": {}, "comment": "", "result": True} if name not in __reg__: ret["comment"] = f"{name} not found in register" ret["result"] = False def opadd(vals): sum = 0 for val in vals: sum = sum + val return sum def opmul(vals): prod = 0 for val in vals: prod = prod * val return prod ops = { "add": opadd, "mul": opmul, "mean": statistics.mean, "median": statistics.median, "median_low": statistics.median_low, "median_high": statistics.median_high, "median_grouped": statistics.median_grouped, "mode": statistics.mode, } count = 0 vals = [] __reg__[name]["val"].reverse() for regitem in __reg__[name]["val"]: count += 1 if count > num: break if ref is None: vals.append(regitem) else: vals.append(regitem[ref]) answer = ops[oper](vals) if minimum > 0 and answer < minimum: ret["result"] = False if 0 < maximum < answer: ret["result"] = False ret["changes"] = { "Number of values": len(vals), "Operator": oper, "Answer": answer, } return ret def add(name, num, minimum=0, maximum=0, ref=None): """ Adds together the ``num`` most recent values. Requires a list. USAGE: .. code-block:: yaml foo: calc.add: - name: myregentry - num: 5 """ return calc( name=name, num=num, oper="add", minimum=minimum, maximum=maximum, ref=ref ) def mul(name, num, minimum=0, maximum=0, ref=None): """ Multiplies together the ``num`` most recent values. Requires a list. USAGE: .. code-block:: yaml foo: calc.mul: - name: myregentry - num: 5 """ return calc( name=name, num=num, oper="mul", minimum=minimum, maximum=maximum, ref=ref ) def mean(name, num, minimum=0, maximum=0, ref=None): """ Calculates the mean of the ``num`` most recent values. Requires a list. USAGE: .. code-block:: yaml foo: calc.mean: - name: myregentry - num: 5 """ return calc( name=name, num=num, oper="mean", minimum=minimum, maximum=maximum, ref=ref ) def median(name, num, minimum=0, maximum=0, ref=None): """ Calculates the mean of the ``num`` most recent values. Requires a list. USAGE: .. code-block:: yaml foo: calc.median: - name: myregentry - num: 5 """ return calc( name=name, num=num, oper="median", minimum=minimum, maximum=maximum, ref=ref ) def median_low(name, num, minimum=0, maximum=0, ref=None): """ Calculates the low mean of the ``num`` most recent values. Requires a list. USAGE: .. code-block:: yaml foo: calc.median_low: - name: myregentry - num: 5 """ return calc( name=name, num=num, oper="median_low", minimum=minimum, maximum=maximum, ref=ref ) def median_high(name, num, minimum=0, maximum=0, ref=None): """ Calculates the high mean of the ``num`` most recent values. Requires a list. USAGE: .. code-block:: yaml foo: calc.median_high: - name: myregentry - num: 5 """ return calc( name=name, num=num, oper="median_high", minimum=minimum, maximum=maximum, ref=ref, ) def median_grouped(name, num, minimum=0, maximum=0, ref=None): """ Calculates the grouped mean of the ``num`` most recent values. Requires a list. USAGE: .. code-block:: yaml foo: calc.median_grouped: - name: myregentry - num: 5 """ return calc( name=name, num=num, oper="median_grouped", minimum=minimum, maximum=maximum, ref=ref, ) def mode(name, num, minimum=0, maximum=0, ref=None): """ Calculates the mode of the ``num`` most recent values. Requires a list. USAGE: .. code-block:: yaml foo: calc.mode: - name: myregentry - num: 5 """ return calc( name=name, num=num, oper="mode", minimum=minimum, maximum=maximum, ref=ref )