# More Math!
Basic math functions that have been stabilized to act well over `Null`/`None`/`NaN`
|Branch |Status |
|------------|---------|
|master | [](https://github.com/klahnakoski/mo-math/actions/workflows/build.yml) |
|dev | [](https://travis-ci.com/github/klahnakoski/mo-math) |
## Overview
Many of the basic math functions you know and love, with the additional benefit
that they do not throw exceptions and do not return `NaN`.
These functions are all module methods. Be sure you call the functions
with `mo_math.` prefix, like
import mo_math
mo_math.abs(-42)
or rename the functions
from mo_math import abs as mo_abs
mo_abs(-42)
This prevents confusion with the `__builtin__` functions by the same name
## Functions
Functions are generally [conservative](https://github.com/mozilla/ActiveData/blob/dev/docs/jx_decisive_operators.md#definitions) in the face of nulls: Specifically, they return `Null` if any of their operands are not a number.
Most functions need no introduction, but some are interesting:
- `round(value, decimal=7, digits=None)` - Rounds to 7 decimal points, unless specified differently. Rounding to `decimal=0` will return an `int`. The useful parameter here is `digits`, which rounds to a specified number of significant digits.
- `floor(value, mod=1)` - The `mod`ulo parameter is used to specify the granularity of the floor function.
- `ceiling(value, mod=1)` - Return the smallest value, that's equal or larger than `value`, with suitable granularity.
- `mod(value, mod=1)` - Works on floats
- `approx_str(value)` - Round values, and return `text` (`unicode` in py2, `str` in py3)
- `sign(v)` - Missing from the Python library
The all-caps aggregate functions accept only one parameter; an iterable. They are [decisive](https://github.com/mozilla/ActiveData/blob/dev/docs/jx_decisive_operators.md#definitions) operators: Non-numbers are ignored, if no values are numbers then the aggregate will return `Null`.
- `COUNT(values)`
- `SUM(values)`
- `PRODUCT(values)`
- `MIN(values)`
- `MAX(values)`
## Crypto
The AES and RSA crypto functions provide structured input/output on top of `cryptography` library. The intent is to reveal the signed/encrypted structures so third parties can decode the data.
Raw data
{
"_id": null,
"home_page": "https://github.com/klahnakoski/mo-math",
"name": "mo-math",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": null,
"author": "Kyle Lahnakoski",
"author_email": "kyle@lahnakoski.com",
"download_url": "https://files.pythonhosted.org/packages/d5/29/c30c87e51fa84bb6de7fd00ea46882420cd0db159440f6559759f77a7c7e/mo_math-7.671.25036.tar.gz",
"platform": null,
"description": "\r\n# More Math! \r\n\r\nBasic math functions that have been stabilized to act well over `Null`/`None`/`NaN`\r\n\r\n\r\n|Branch |Status |\r\n|------------|---------|\r\n|master | [](https://github.com/klahnakoski/mo-math/actions/workflows/build.yml) |\r\n|dev | [](https://travis-ci.com/github/klahnakoski/mo-math) |\r\n\r\n\r\n\r\n## Overview\r\n\r\nMany of the basic math functions you know and love, with the additional benefit \r\nthat they do not throw exceptions and do not return `NaN`. \r\n\r\nThese functions are all module methods. Be sure you call the functions \r\nwith `mo_math.` prefix, like \r\n\r\n import mo_math\r\n\tmo_math.abs(-42)\r\n\r\nor rename the functions\r\n\r\n from mo_math import abs as mo_abs\r\n mo_abs(-42)\r\n\r\nThis prevents confusion with the `__builtin__` functions by the same name \r\n\r\n\r\n## Functions\r\n\r\nFunctions are generally [conservative](https://github.com/mozilla/ActiveData/blob/dev/docs/jx_decisive_operators.md#definitions) in the face of nulls: Specifically, they return `Null` if any of their operands are not a number.\r\n\r\nMost functions need no introduction, but some are interesting:\r\n\r\n- `round(value, decimal=7, digits=None)` - Rounds to 7 decimal points, unless specified differently. Rounding to `decimal=0` will return an `int`. The useful parameter here is `digits`, which rounds to a specified number of significant digits.\r\n- `floor(value, mod=1)` - The `mod`ulo parameter is used to specify the granularity of the floor function.\r\n- `ceiling(value, mod=1)` - Return the smallest value, that's equal or larger than `value`, with suitable granularity.\r\n- `mod(value, mod=1)` - Works on floats\r\n- `approx_str(value)` - Round values, and return `text` (`unicode` in py2, `str` in py3) \r\n- `sign(v)` - Missing from the Python library \r\n\r\n\r\nThe all-caps aggregate functions accept only one parameter; an iterable. They are [decisive](https://github.com/mozilla/ActiveData/blob/dev/docs/jx_decisive_operators.md#definitions) operators: Non-numbers are ignored, if no values are numbers then the aggregate will return `Null`.\r\n\r\n- `COUNT(values)`\r\n- `SUM(values)` \r\n- `PRODUCT(values)` \r\n- `MIN(values)` \r\n- `MAX(values)` \r\n\r\n## Crypto\r\n\r\nThe AES and RSA crypto functions provide structured input/output on top of `cryptography` library. The intent is to reveal the signed/encrypted structures so third parties can decode the data.\r\n",
"bugtrack_url": null,
"license": "MPL 2.0",
"summary": "More Math! Many of the aggregates you are familiar with, but null-safe",
"version": "7.671.25036",
"project_urls": {
"Homepage": "https://github.com/klahnakoski/mo-math"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "dd941c17e783bc34df1ef240dd319563c16c17dac15d2fc1ca7f64c3548d2880",
"md5": "0dd54cc902c9c007b75a9ae35b5aa9eb",
"sha256": "dd9e4e0b6fab3d9b1b627650063a5ad40adcf56a7e9e32db66914f0d8291965a"
},
"downloads": -1,
"filename": "mo_math-7.671.25036-py3-none-any.whl",
"has_sig": false,
"md5_digest": "0dd54cc902c9c007b75a9ae35b5aa9eb",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 55281,
"upload_time": "2025-02-05T01:31:19",
"upload_time_iso_8601": "2025-02-05T01:31:19.127607Z",
"url": "https://files.pythonhosted.org/packages/dd/94/1c17e783bc34df1ef240dd319563c16c17dac15d2fc1ca7f64c3548d2880/mo_math-7.671.25036-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d529c30c87e51fa84bb6de7fd00ea46882420cd0db159440f6559759f77a7c7e",
"md5": "f04336ea3449ecb3031bea51aed7f462",
"sha256": "3e7d88d36fc834357eb65b91bd2237e2f70c96e7ab183c2f74437959422143cd"
},
"downloads": -1,
"filename": "mo_math-7.671.25036.tar.gz",
"has_sig": false,
"md5_digest": "f04336ea3449ecb3031bea51aed7f462",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 48349,
"upload_time": "2025-02-05T01:31:22",
"upload_time_iso_8601": "2025-02-05T01:31:22.821316Z",
"url": "https://files.pythonhosted.org/packages/d5/29/c30c87e51fa84bb6de7fd00ea46882420cd0db159440f6559759f77a7c7e/mo_math-7.671.25036.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-05 01:31:22",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "klahnakoski",
"github_project": "mo-math",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "mo-math"
}