Skip to main content

Snuggs are s-expressions for Numpy

Project description

https://travis-ci.org/mapbox/snuggs.svg?branch=master https://coveralls.io/repos/mapbox/snuggs/badge.svg

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])

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

snuggs-1.4.2.tar.gz (4.5 kB view details)

Uploaded Source

Built Distribution

snuggs-1.4.2-py3-none-any.whl (4.3 kB view details)

Uploaded Python 3

File details

Details for the file snuggs-1.4.2.tar.gz.

File metadata

  • Download URL: snuggs-1.4.2.tar.gz
  • Upload date:
  • Size: 4.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for snuggs-1.4.2.tar.gz
Algorithm Hash digest
SHA256 8d56182fc83e1a1893284f69abd35751ce30e8f0a33794c2802e7e5d6547e1f1
MD5 c5f01e68d1f1f180cbb3b93555181e8c
BLAKE2b-256 07d9284b51b951fe2d56266be31f2d5c788b5e8251fdafe5121721d9d36940e1

See more details on using hashes here.

File details

Details for the file snuggs-1.4.2-py3-none-any.whl.

File metadata

File hashes

Hashes for snuggs-1.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0ae01783adeaa6948352fc474605da78d277da545b2315f6d2febe0f065bab02
MD5 9abdb45bdf92fc96cb5a2817c85bde5d
BLAKE2b-256 53afe6c28e9062894e1115f629ed43c8a7a8ea285ede2901d56424faf42ae1d0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page