snuggs
Snuggs are s-expressions for Numpy
>>> snuggs.eval("(+ (asarray 1 1) (asarray 2 2))")
array([3, 3])
Syntax
Snuggs wraps Numpy in expressions with the following syntax:
expression = "(" (operator | function) *arg ")"
arg = expression | name | number | string
Examples
Addition of two numbers
import snuggs
snuggs.eval('(+ 1 2)')
# 3
Multiplication of a number and an array
Arrays can be created using asarray.
snuggs.eval("(* 3.5 (asarray 1 1))")
# array([ 3.5, 3.5])
Evaluation context
Expressions can also refer by name to arrays in a local context.
snuggs.eval("(+ (asarray 1 1) b)", b=np.array([2, 2]))
# array([3, 3])
This local context may be provided using keyword arguments (e.g., b=np.array([2, 2])), or by passing a dictionary that stores the keys and associated array values. Passing a dictionary, specifically an OrderedDict, is important when using a function or operator that references the order in which values have been provided. For example, the read function will lookup the i-th value passed:
ctx = OrderedDict((
('a', np.array([5, 5])),
('b', np.array([2, 2]))
))
snuggs.eval("(- (read 1) (read 2))", ctx)
# array([3, 3])
Functions and operators
Arithmetic (* + / -) and logical (< <= == != >= > & |) operators are available. Members of the numpy module such as asarray(), mean(), and where() are also available.
snuggs.eval("(mean (asarray 1 2 4))")
# 2.3333333333333335
snuggs.eval("(where (& tt tf) 1 0)",
tt=numpy.array([True, True]),
tf=numpy.array([True, False]))
# array([1, 0])
Higher-order functions
New in snuggs 1.1 are higher-order functions map and partial.
snuggs.eval("((partial * 2) 2)")
# 4
snuggs.eval('(asarray (map (partial * 2) (asarray 1 2 3)))')
# array([2, 4, 6])
Performance notes
Snuggs makes simple calculator programs possible. None of the optimizations of, e.g., numexpr (multithreading, elimination of temporary data, etc) are currently available.
If you’re looking to combine Numpy with a more complete Lisp, see Hy:
=> (import numpy)
=> (* 2 (.asarray numpy [1 2 3]))
array([2, 4, 6])
Metadata
Release files for snuggs 1.4.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| snuggs-1.4.7.tar.gz | 8.2 kB | Without provenance | Details for snuggs-1.4.7.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| snuggs-1.4.7-py3-none-any.whl | Python 3 | none | any | Details for snuggs-1.4.7-py3-none-any.whl |
Total release size: 13.6 kB
Release files / snuggs-1.4.7.tar.gz
| Download URL | snuggs-1.4.7.tar.gz |
|---|---|
| Size | 8.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
501cf113fe3892e14e2fee76da5cd0606b7e149c411c271898e6259ebde2617b
|
|
BLAKE2b-256 checksum How to use checksums |
93190d11ab370735dde61076a0e41644e5593821776e69e3b0344626cfa0e56a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.0 CPython/3.6.7
|
Release files / snuggs-1.4.7-py3-none-any.whl
| Download URL | snuggs-1.4.7-py3-none-any.whl |
|---|---|
| Size | 5.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
988dde5d4db88e9d71c99457404773dabcc7a1c45971bfbe81900999942d9f07
|
|
BLAKE2b-256 checksum How to use checksums |
cc0ed27d6e806d6c0d1a2cfdc5d1f088e42339a0a54a09c3343f7f81ec8947ea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.0 CPython/3.6.7
|
Security for snuggs 1.4.7
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.