Traits (Mixins) to give +,/,-,* to MutableMapping
Project description
Source : https://github.com/jul/archery
Latest documentation : http://archery.readthedocs.org/en/latest/index.html
What is archery?
It is set of Mixins to use on MutableMapping giving the following features :
Linear Algebrae;
Vector like metrics;
Searchable behaviour;
for convenience 3 concrete classes are provided :
Basic Usage
Using the ready to use class derived from dict
mdict
dict that supports consistently all the linear algebrae properties
Basically : dict that are vectors on arbitrary basis (recursively).
To learn more about its use and implementation:
ex:
>>> from archery import mdict >>> point = mdict(x=1, y=1, z=1) >>> point2 = mdict(x=1, y=-1) >>> print( (2 * point + point2)/4) >>> # OUT : {'y': 0.25, 'x': 0.75, 'z': 0.5} >>> print(point - point2) >>> # OUT : {'y': 2, 'x': 0, 'z': 1} >>> b=mdict(x=2, z=-1) >>> a=mdict(x=1, y=2.0) >>> a+b >>> # OUT: {'y': 2.0, 'x': 3, 'z': -1} >>> b-a >>> # OUT: {'y': -2.0, 'x': 1, 'z': -1} >>> -(a-b) >>> # OUT: {'y': -2.0, 'x': 1, 'z': -1} >>> a+1 >>> # OUT: {'y': 3.0, 'x': 2} >>> -1-a >>> # OUT: {'y': -3.0, 'x': -2} >>> a*b >>> # OUT: {'x': 2} >>> a/b >>> # OUT: {'x': 0} >>> 1.0*a/b >>> # OUT: {'x': 0.5}
vdict
dict that defines abs(), dot(), cos() in the euclidean meaning
ex:
>>> from archery import vdict as Point >>> >>> u = Point(x=1, y=1) >>> v = Point(x=1, y=0) >>> u.cos(v) >>> 0.7071067811865475 >>> u.dot(v) >>> # OUT: 1 >>> u.cos(2*v) >>> # OUT: 0.7071067811865475 >>> u.dot(2*v) >>> #OUT: 2 >>> abs(u) >>> #OUT: 1.4142135623730951 >>> u3 = Point(x=1, y=1, z=2) >>> u4 = Point(x=1, y=3, z=4) >>> u3 + u4 >>> #OUT: dict(x=2, y=4, z=6) >>> assert u4 + u4 == 2*u4 >>> from archery import vdict >>> from math import acos, pi >>> point = vdict(x=1, y=1, z=1) >>> point2 = vdict(x=1, y=-1) >>> point2 = mdict(x=1, y=-1) >>> print( (2 * point + point2)/4) >>> # OUT : {'y': 0.25, 'x': 0.75, 'z': 0.5} >>> print(acos(vdict(x=1,y=0).cos(vdict(x=1, y=1)))*360/2/pi) >>> # OUT : 45.0 >>> print(abs(vdict(x=1, y=1))) >>> # OUT : 1.41421356237 >>> print(vdict(x=1,y=0,z=3).dot(vdict(x=1, y=1, z=-1))) >>> #OUT -2
sdict
dict made for searching value/keys/Path with special interests.
Basically, it returns an iterator in the form of a tuple being all the keys and the value. It is a neat trick, if you combine it with make_from_path, it helps select exactly what you want in a dict:
>>> from archery import sdict, make_from_path >>> tree = sdict( ... a = 1, ... b = dict( ... c = 3.0, ... d = dict(e=True) ... ), ... point = dict( x=1, y=1, z=0), ... ) >>> list(tree.leaf_search(lambda x: type(x) is float )) >>> #Out: [3.0] >>> res = list(tree.search(lambda x: ("point") in x )) >>> ## equivalent to list(tree.search(lambda x: Path(x).contains("point"))) >>> print(res) >>> #Out: [('point', 'y', 1), ('point', 'x', 1), ('point', 'z', 0)] >>> make_from_path(dict(), res) >>> # {('point', 'y', 1): {('point', 'x', 1): ('point', 'z', 0)}}
Advanced usage
This library is a proof of the consistent use of Mixins on MutableMapping gives the property seen in the basic usage.
The Mixins do not require any specifics regarding the implementation and should work if I did my job properly with any kinds of MutableMapping.
Here is an example of a cosine similarities out of the box on the Collections.Counter
>>> from collections import Counter >>> from archery import VectorDict >>> class CWCos(VectorDict, Counter): ... pass >>> >>> CWCos(["mot", "wut", "wut", "bla"]).cos(CWCos(["mot","wut", "bla"])) >>> # OUT: 0.942809041582
You can also inherit LinearAlgebrae
Resource
Ticketing: https://github.com/jul/archery/issues?state=open Source: https://github.com/jul/archery Latest documentation: http://archery.readthedocs.org/en/latest/index.html
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file archery-1.3.0.tar.gz
.
File metadata
- Download URL: archery-1.3.0.tar.gz
- Upload date:
- Size: 19.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 30923281a2e6f76d34d0aa10540f6468fd996366b9a1b393c4029d90f01b3728 |
|
MD5 | 6f78c76d924d233144f9c3df15400692 |
|
BLAKE2b-256 | 32df6002230e936350f29ba911b40ac8e43661fc6cec53f9cf131b44b49203bf |