Skip to main content

Hypothesis GU Funcs

https://api.travis-ci.com/uber/hypothesis-gufunc.png?token=RSemjpisB7uiZv78DVwd&branch=master

This project is experimental and the APIs are not considered stable.

Only Python>=3.6 is officially supported, but older versions of Python likely work as well.

This package includes support for strategies which generate arguments to functions that follow the numpy general universal function API. So, it can automatically generate the matrices with shapes that follow the shape constraints. For example, to generate test inputs for np.dot, one can use,

import numpy as np
from hypothesis import given
from hypothesis.strategies import floats
from hypothesis_gufunc.gufunc import gufunc_args

easy_floats = floats(min_value=-10, max_value=10)

@given(gufunc_args('(m,n),(n,p)->(m,p)', dtype=np.float_, elements=easy_floats))
def test_np_dot(args):
    x, y = args
    assert np.allclose(np.dot(x, y), np.dot(y.T, x.T).T)

test_np_dot()  # Run the test

We also allow for adding extra dimensions that follow the numpy broadcasting conventions. This allows one to test that the broadcasting follows the vectorization conventions:

@given(gufunc_args('(m,n),(n,p)->(m,p)', dtype=np.float_, elements=easy_floats, max_dims_extra=3))
def test_np_matmul(args):
    x, y = args
    f_vec = np.vectorize(np.matmul, signature='(m,n),(n,p)->(m,p)', otypes=[np.float_])
    assert np.allclose(np.matmul(x, y), f_vec(x, y))

test_np_matmul()  # Run the test

Providing max_dims_extra=3 gives up to 3 broadcast compatible dimensions on each of the arguments.

Quick Start/Installation

Simply install with pip:

pip install hypothesis-gufunc

If one would like the same pinned requirements we use during testing, then one can install from the repo with:

git clone git@github.com:uber/hypothesis-gufunc.git
cd hypothesis-gufunc
pip install -r requirements/base.txt
pip install -e .

Running the Tests

The tests for this package can be run by first doing a cd to its root directory and then

./test.sh

The script creates a conda environment using the requirements found in requirements/test.txt.

Hypothesis for Xarray

This package also contains an extension to hypothesis to generate xarray data structures.

To install the package with the xarray dependencies install it with pip as

pip install hypothesis-gufunc[xarray]

Once installed, one can generate a data array as follows:

from hypothesis.strategies import integers, lists
from hypothesis_gufunc.extra.xr import fixed_dataarrays

S = fixed_dataarrays(("a", "b"), coords_st={"a": lists(integers(0, 3))})
S.example()

Here, coords_st allows one to specify a custom strategy for the coordinates on a per-dimension basis. Likewise, if one has known coordinates one can call fixed_coords_dataarrays; or dataarrays if one wants both the dimensions and coordinates determined by the strategy.

The package also has the ability to generate a dataset:

from hypothesis_gufunc.extra.xr import fixed_datasets

S = fixed_datasets({5: ("a", "b"), "bar": ("b"), "baz": ()}, coords_st={"a": lists(integers(0, 3))})
S.example()

One can use fixed_coords_datasets when the coordinates are determined; or simply datasets to have both the dimensions and coordinates generated.

License

This project is licensed under the Apache 2 License - see the LICENSE file for details.

Metadata

Release files for hypothesis-gufunc 0.0.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hypothesis-gufunc 0.0.6
File Size Uploaded
hypothesis_gufunc-0.0.6.tar.gz 17.1 kB Details

Release files / hypothesis_gufunc-0.0.6.tar.gz

Download URL hypothesis_gufunc-0.0.6.tar.gz
Size 17.1 kB
Tags Source
SHA-256 checksum
How to use checksums
76150691c0f2e8e6f8a059428f2b3b79d8ed3c4f8c5b1ee3e7a5db5ae87c3c66
BLAKE2b-256 checksum
How to use checksums
9a958eea1980b26d8e8a651f6476f8547ff858b26a151ef3e063044dbf627f44
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.7.4

Release history Release notifications | RSS feed

This release

0.0.6 This release

1 release file

0.0.5

1 release file

0.0.4

1 release file

0.0.3

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page