Skip to main content

Fully configurable unpacking and comparison logic for arbitrary objects

Project description

compyre

What is this?

compyre provides container unpacking and elementwise equality comparisons for arbitrary objects using their native functionality. It offers convenient defaults, while being fully configurable.

"X all the Y" meme with "compyre all the things" as text

Why do I need it?

Have you ever found yourself in a situation where you needed to test a potentially nested container of values against a reference? pytest, the de facto standard test framework for Python, features awesome failure reporting for builtin types such as dictionaries, lists, integers, strings, and so on.

But what about other common types that come with their own comparison logic, e.g. numpy.ndarray and numpy.testing.assert_allclose? How do you compare a dictionary or worse a dataclass of these?

  • Did you ever skip writing a proper test in such a situation and opted to write a simple, but incomplete one instead?
  • If not, did you write the test as loop over the individual elements, and later spend more time debugging, because you have no way of knowing for which element the test failure happened?
  • If not, is manually writing out all the assertions and maintaining them keeping you from working on the stuff that actually matters for your application or library?

If you have answered "yes" for any of the questions above, compyre was made for you.

How do I get started?

Most basic cases can be covered by compyre.equal or compyre.assert_equal. The former provides a boolean check, while the latter raises an AssertionError with information what elements mismatch and why.

import dataclasses

import numpy as np

import compyre

@dataclasses.dataclass
class MyObject:
    id: str
    data: list[np.ndarray]

expected = MyObject(
    id="foo",
    data=[np.array([1, 2]), np.array([3, 4])],
)

actual = MyObject(
    id="bar",
    data=[np.array([1, 2]), np.array([3, 5])],
)

compyre.assert_equal(actual, expected)
AssertionError: comparison resulted in 2 error(s):

id
    AssertionError: 'bar' != 'foo'
data.1
    AssertionError: 
    Not equal to tolerance rtol=1e-07, atol=0

    Mismatched elements: 1 / 2 (50%)
    Max absolute difference among violations: 1
    Max relative difference among violations: 0.25
     ACTUAL: array([3, 5])
     DESIRED: array([3, 4])

How do I learn more?

Please have a look at the documentation.

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

compyre-0.3.0.tar.gz (300.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

compyre-0.3.0-py3-none-any.whl (17.0 kB view details)

Uploaded Python 3

File details

Details for the file compyre-0.3.0.tar.gz.

File metadata

  • Download URL: compyre-0.3.0.tar.gz
  • Upload date:
  • Size: 300.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for compyre-0.3.0.tar.gz
Algorithm Hash digest
SHA256 2065e8f525c529c7b33bab1f1c525cc17f18c6cbf08914986893816ced05dc0d
MD5 db0a186723b3c16a16e73d1edcaf3702
BLAKE2b-256 0dec88b493a68d9f04b8afb9e506ccfc904c9a1e46f643651489f073f84d262c

See more details on using hashes here.

File details

Details for the file compyre-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: compyre-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 17.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for compyre-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9d11b48f1c38570ba05f6f76a91b4022d9dd654f063e979711d55dc8b4974c09
MD5 4ce13de0562c0ab9c5697a52ec1fbb92
BLAKE2b-256 3b8cf026d24c967a261eb0be095170c782d62248b9d87ebb299457dbc388b4d2

See more details on using hashes here.

Supported by

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