CHANGES
=======

1.13.0
------

* feat: support for multilabel images (#18)

1.12.2
------

* fix: another rounding bug
* ci: update cibuildwheel
* fix: rare out of bounds access
* fix: give output for zero dimension
* fix: add bounds checking to calculate\_area
* refactor: remove unused dummy contact

1.12.1
------

* ci: bump cibw to 3.1.4
* test: basic tests for contact value

1.12.0
------

* perf: accelerate is\_26\_connected
* fix: make benchmark code compatible with 1.11.0
* docs: update benchmark results
* test: add more stringent test on third axis for sphere

1.11.0
------

* fix: windows reserves the filename aux
* perf: persistent buffer with colored pens (#16)

1.10.0
------

* chore: change benchmark so that it doesn't conflict with git
* perf: faster area calculation using 2x2x2 regions (#15)
* perf: eliminate unnecessary array copy

1.9.1
-----

* fix: ensure initial point is evaluated correctly
* fix: error in sorting network 6
* feat: add a simple performance benchmark and record results by version
* fix: incorrect contact area calculation
* fix: off-by-half errors in mapping position to voxel location (#14)
* test: check that plane walk visits all necessary locations
* refactor: move vector and area functions to separate files
* docs: fix description of "section" function

1.9.0
-----

* fix: types were not compatible were certain numpy 1 versions
* perf: more performance tuning on area\_of\_poly (#13)

1.8.1
-----

* ci: update windows build
* fix: area of quad incorrect for non-parallelograms
* docs: show how to use crop

1.8.0
-----

* fix(windows): avoid narrowing conversion
* ci: use ubuntu latest
* feat(slice): adds \`crop\` parameter + typing (#11)
* perf: avoid function call overhead
* perf: reduce number of allocations for values array
* perf: faster sorting networks
* perf(area): faster poly area calculation (#12)
* perf(area): reduce allocation time for spokes

1.7.2
-----

* ci: update tests to drop py38 and add py313
* ci: update build system for py3.13
* chore: bump support to py3.13 and fix homepage

1.7.1
-----

* fix: license was incorrect classifier
* ci: rebuild for numpy 2.0
* license: switch to LGPL now that cc3d is LGPL

1.7.0
-----

* feat: add return\_contact feature to cross\_section
* fix: cross\_section array order was incorrect

1.6.0
-----

* perf: lift repetitive calculations out of check\_intersections
* perf: pre-calculate inverses
* perf: lift max distance to plane to constexpr
* perf: convert /2 into \*0.5
* perf: reduce number of divisions in pentagon and hexagon calc
* perf: skip intersection checks when plane is too far away
* docs: add installation instructions

1.5.0
-----

* redesign: set standardize\_basis to True
* docs: add anisotropy to slice
* redesign: remove basis reflection code
* fix: ensure sufficient plane space after anisotropy correction
* fix: comment out inverting axes
* fix: correct for anisotropy in slice operator
* fix+test: ensure correct return type for 2d
* fix: harmonize behavior of our of range 2d with 3d
* test: do some cursory checks for 2d
* fix: ensure 2d pos inputs are ints for ccl
* test: increase test coverage of exceptional lines
* test: check exceptions for cross\_sectional\_area
* perf: avoid computing nearest point when |t| > 1
* perf: faster inlist
* fix: mark close as const
* perf: compute three fewer dot products per intersection test
* perf: use a simpler calculation for area of quad
* perf: reduce redundancy of calculation for intersections
* perf: faster bounds check for intersections
* perf: remove acos call from area\_of\_poly
* fix: ensure stdexcept is included
* feat: make projection more similar to standard basis

1.4.0
-----

* fix: ssize\_t not defined on windows
* feat: slice operator (#6)
* fix: visited plane must be able to handle sqrt(3) in any direction
* docs: mention that the normal is given in voxel space

1.3.0
-----

* test: add more anisotropic tests for hexagon
* test: add some checks for anisotropy handling
* test: ensure cross\_section agrees with the area computaton
* docs: show how to use cross\_section on the front page
* docs: better docstring fro cross\_section
* feat: add support for xs3d.cross\_section
* test: add a few more normals to test
* test: check that moving the shape in the image doesn't affect things

1.2.0
-----

* fix: should be greater than or equal to
* fix: incorrect starting location in intersection
* test: tighten acceptable bounds on sphere test
* test: check empty volumes
* test: check more negative normals
* fix: floating point error causing intersections to be missed
* fix: incorrect calculation of triangle area
* fix: contact should be evaluated after testing for within object
* docs: show how to use contact warning
* docs: add pypi badge
* test: check negative normals
* perf: no need to reserve 12 pts
* refactor: rename diagonal to plane\_size
* fix: plane was too small on odd size grids
* test: check odd size 5x5x1 to ensure plane is large enough
* perf: faster normal projection in intersection checks
* fix: import algorithm and string
* docs: show how to interpret the bitfield
* feat: change 2d contact to bitfield
* feat+test: change contact from bool to bitfield
* test: check if contact area works
* feat: contact warning (#4)
* perf: reduce evaluation cost of bounds check
* Revert "perf: ensure basis vectors always advance at least 1 unit"
* refactor: make ihat, jhat, khat global variables
* perf: ensure basis vectors always advance at least 1 unit
* refactor: mark pipes and pipe\_points as const
* perf: limit number of intersections tested

1.1.0
-----

* perf: speed up for axis aligned normals

1.0.0
-----

* ci: upgrade cibuildwheel
* perf: don't re-evaluate spots w/ < 3 pts
* perf: faster calculation of cross sectional area (#1)

0.2.0
-----

* build: add cc3d to build
* test: explicitly install connected-components-3d
* install: added cc3d to pyproject.toml
* test: rename automated\_tests.py to automated\_test.py
* test: remove py37 and add py312
* test: change test branch to main
* fix: get raw pointer
* refactor: use unique\_ptr for markup
* build: add github actions
* test: give smoothness a more reasonable foundation
* test: check sphere for reasonable area and smoothness over theta
* fix: exclude null vector normal vectors

0.1.0
-----

* build: add MANIFEST.in and pyproject.toml
* docs: update README
* install: adding setup.py
* test: check range of rotation is sensible
* test: add a few basic integrity tests for a voxel
* fix: ensure binimg is a fortran array
* chore: remove python implementation of 3d
* fix: add type guards
* fix: ensure anisotropy is a numpy array
* chore: spaces to tabs
* fix: some ccl floating point boundary errors
* fix: support anisotropy for 5 and 6 sided contacts
* fix: support 5 and 6 vertex contact situations
* feat: add support for 3d anisotropy
* feat: kinda working fast 3d implementation
* wip: c++ code compiles
* feat: add 3d cross section computation
* Initial commit
