0.5.2, 2026-10-26
- clearer error messages from `thing_or_things` and `decorator`: they name the function and, where there is one, the fix. Exception types are unchanged
- `thing_or_things` supports keyword-only parameters as the thing
- `thing_or_things` ignores a method's `self` / `cls` when finding the thing, so methods like `get(self, ids)` no longer need it named
- `thing_or_things` treats a frozenset as many things, like a set; it rejects async functions and unhashable things up front
- decorators built with `decorator` (including `thing_or_things`) raise TypeError when stacked below `@classmethod` / `@staticmethod`, instead of silently misbehaving
- fix truthiness and mixed-type operators on ambiguous functions: `bool()` / `if` on a str or list result, `one == 1.0`, `1.5 + one`, `'a' + text`
- the `@ambiguous` class decorator leaves `async def` methods alone, so they stay awaitable; `@ambiguous` directly on an `async def` raises TypeError
- fix the `@ambiguous` class decorator calling ambiguous functions stored as class attributes
- fix `@ambiguous` above `@abc.abstractmethod` losing abstractness, which let the abstract class be instantiated
- fix builtins on ambiguous functions that relied on Python's fallbacks: `x ** 0.5`, `divmod(x, 2.5)`, `int('12')`, `reversed('abc')`, `math.floor()` / `math.ceil()`, `complex()`, `os.fspath()`, and `iter()` / `hash()` raising TypeError for unsupported results
- `@ambiguous` now works directly on methods; `ambiguous.method`, `ambiguous.classmethod` and `ambiguous.staticmethod` are removed. Replace `@ambiguous.method` with `@ambiguous`, and `@ambiguous.classmethod` / `@ambiguous.staticmethod` with `@ambiguous` stacked above `@classmethod` / `@staticmethod`
- an `@ambiguous` function defined in a class body and taking `self` now binds it on instance access, like a plain method; any other, eg. `region = default_region` or `ambiguous(lambda: 5)`, stays a value. In an Enum, or a NamedTuple on Python 3.12, decorate the class with `@ambiguous` instead of individual methods
- `ambiguous()` now raises TypeError instead of NotImplementedError for unsupported types; update any `except NotImplementedError`
- fix ambiguous methods on falsy instances, and classmethods called via a subclass of an @ambiguous class
- fix `inspect.signature` raising "wrapper loop" when a @decorator returns its target unchanged
- fix `+=` and other in-place operators on ambiguous functions returning immutable values, eg. int or str
- fix thing_or_things when the thing is passed by keyword or left to its default
- the sdist includes the complete test suite, so `python -m unittest` runs from an unpacked sdist

0.5.1, 2026-06-13
- fix thing_or_things arg-detection crash and tidy ops
- build AmbiguousFunction once instead of per call
- gate matrix behind a single required `test` check
- modernize packaging and CI

0.5.0, 2024-06-25
- test coverage
- simplify
- editorconfig
- readme update
- rm tox
- pyproject upgrade (#1)
- unittest naming standards
- drop Python 2 support

0.4.1, 2019-12-27
- abstract commonality into funciton
- add ambiguous class support

0.4.0, 2019-02-15
- Update README.md
- python3 compatibility
- python3 compatibility
- organize
- gc incomplete work
- s/assertEquals/assertEqual/
- move to relative import for python3
- python 3 upgrade
- Update README.md

0.3.2, 2018-09-10
- return proper type
- more test coverage
- fix old obj and add test
- old style class support
- simplify ambiguous logic

0.3.1, 2018-04-24
- enable thing_or_things fn to skip return values and just use input wrapper

0.3.0, 2018-04-16
- remove thing_or_things support for varargs for now because it was too ambiguous
- no longer needed
- counter example
- expand tests
- focus decorator module, rename is_class and is_self
- cleanup
- rename
- better testing
- move selfish into its own package

0.2.1, 2018-03-23
- wire things up
- Update README.md
- expand selfish to cover class methods also
- more testing, cleanup
- expand selfish test coverage
- decorate classes properly
- Update README.md
- Update README.md
- add selfish decorator, because who has time to type self everywhere
- upgrades to fix some bugs involving static methods
- expand test coverage
- add kwargs
- auto wrap decorator
- add decorator.is_class
- cleanup
- allow call with empty args
- add decorator.is_self and inspector module, plus tests
- add __all__
- more tests
- masquerade better
- better error handling for thing_or_things
- cleanup
- fix sequential arg bug, expand tests
- add lamda coverage, clean up names
- enable positional args in addition to kwargs. add tests
- add test coverage for ambiguous decorator
- add tests to cover object instance/class/static methods
- add test to cover thing or things used on class methods
- Update README.md
- add thing_or_things plus tests and module import cleanup

0.1.0, 2018-02-22
- cleanup
- refactor, mascarade module to enable @ambiguous
- s/function/method/
- add instance, class, and static methods
- simplify
- add object test
- expand test coverage

0.0.1, 2018-02-22
