Metadata-Version: 2.3
Name: indifference
Version: 0.2.0
Summary: Track and compare differences between Python objects.
Author: Arseny Boykov (Bobronium)
Author-email: Arseny Boykov (Bobronium) <hi@bobronium.me>
License: MIT
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: License :: OSI Approved :: MIT License
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Libraries
Requires-Dist: pytest-assert-type>=0.1.3
Requires-Dist: indifference[lint] ; extra == 'dev'
Requires-Dist: indifference[typecheck] ; extra == 'dev'
Requires-Dist: indifference[test] ; extra == 'dev'
Requires-Dist: indifference[docs] ; extra == 'dev'
Requires-Dist: mkdocs-material ; extra == 'docs'
Requires-Dist: mkdocstrings[python] ; extra == 'docs'
Requires-Dist: mkdocs-autorefs ; extra == 'docs'
Requires-Dist: mkdocs-section-index ; extra == 'docs'
Requires-Dist: pdoc3>=0.11.6 ; extra == 'docs'
Requires-Dist: lazydocs>=0.4.8 ; extra == 'docs'
Requires-Dist: ruff>=0.5 ; extra == 'lint'
Requires-Dist: pytest>=8 ; extra == 'test'
Requires-Dist: pytest-cov>=5 ; extra == 'test'
Requires-Dist: coverage>=7.4 ; extra == 'test'
Requires-Dist: pytest-assert-type>=0.1.2 ; extra == 'test'
Requires-Dist: typing-extensions ; python_full_version < '3.12' and extra == 'test'
Requires-Dist: mypy>=1.10 ; extra == 'typecheck'
Requires-Dist: pyright>=1.1.400 ; extra == 'typecheck'
Requires-Python: >=3.10
Project-URL: Homepage, https://github.com/Bobronium/indifference
Project-URL: Source, https://github.com/Bobronium/indifference
Project-URL: Issues, https://github.com/Bobronium/indifference/issues
Provides-Extra: dev
Provides-Extra: docs
Provides-Extra: lint
Provides-Extra: test
Provides-Extra: typecheck
Description-Content-Type: text/markdown

# indifference

Track and compare differences between Python objects.

## Installation
```bash
uv pip install indifference
```

## Usage
```python
import pickle
from copy import deepcopy
from indifference import diff, at


class Person:
    def __init__(self, name):
        self.name = name
        self.cache = {}
        self.secret = "hidden"

    def __deepcopy__(self, memo):
        return self

    def __reduce__(self):
        # Pickle excludes secret and modifies name
        state = {"name": "Bob", "cache": {}}
        return (self.__class__, (self.name,), state)

    def __setstate__(self, state):
        self.__dict__.update(state)


original = Person("Alice")

deepcopy_version = deepcopy(original)
pickle_version = pickle.loads(pickle.dumps(original))

deepcopy_story = diff(original, deepcopy_version)
pickle_story = diff(original, pickle_version)


# Use set operations to find differences
differences = deepcopy_story ^ pickle_story  # symmetric difference
common = deepcopy_story & pickle_story  # intersection
unique_to_pickle = pickle_story - deepcopy_story
all_changes = deepcopy_story | pickle_story

# Check what's different between the stories
assert differences == [at.name > "Bob"]
```

## Development
- Install Task: https://taskfile.dev
- First run: `task setup`
- All checks: `task`
