densitty 0.8.2__tar.gz → 0.9.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- densitty-0.9.0/.github/workflows/checks.yml +40 -0
- densitty-0.9.0/.github/workflows/periodic.yml +42 -0
- densitty-0.9.0/.github/workflows/tests.yml +43 -0
- densitty-0.9.0/Makefile +70 -0
- densitty-0.9.0/PKG-INFO +39 -0
- densitty-0.9.0/README.md +14 -0
- densitty-0.9.0/densitty/axis.py +402 -0
- densitty-0.9.0/densitty/binning.py +311 -0
- densitty-0.9.0/densitty/detect.py +525 -0
- densitty-0.9.0/densitty/plot.py +209 -0
- densitty-0.9.0/densitty/smoothing.py +317 -0
- densitty-0.9.0/densitty/truecolor.py +171 -0
- densitty-0.9.0/densitty/util.py +236 -0
- densitty-0.9.0/densitty/util.pyi +37 -0
- densitty-0.9.0/densitty.egg-info/PKG-INFO +39 -0
- densitty-0.9.0/densitty.egg-info/SOURCES.txt +651 -0
- densitty-0.9.0/docs/16-colors.png +0 -0
- densitty-0.9.0/docs/256-colors.png +0 -0
- densitty-0.9.0/docs/FAQ.md +12 -0
- densitty-0.9.0/docs/api.md +213 -0
- densitty-0.9.0/docs/ascii-art.png +0 -0
- densitty-0.9.0/docs/rgb-colors.png +0 -0
- densitty-0.9.0/examples/colormaps.py +66 -0
- densitty-0.9.0/pyproject.toml +62 -0
- densitty-0.9.0/tests/axis_tests.py +243 -0
- densitty-0.9.0/tests/color_tests.py +132 -0
- densitty-0.9.0/tests/golden.py +45 -0
- densitty-0.9.0/tests/golden_diff.py +192 -0
- densitty-0.9.0/tests/goldens/ansi.FADE_IN_16 +1 -0
- densitty-0.9.0/tests/goldens/ansi.FADE_IN_16_halfheight +1 -0
- densitty-0.9.0/tests/goldens/merge_chars +1 -0
- densitty-0.9.0/tests/goldens/merge_lines +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0)-ext-False-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0)-ext-False-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0)-ext-False-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0)-ext-False-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0)-ext-False-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0)-ext-False-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0)-ext-False-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0)-ext-False-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0)-ext-True-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0)-ext-True-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0)-ext-True-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0)-ext-True-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0)-ext-True-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0)-ext-True-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0)-ext-True-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0)-ext-True-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0.100000000)-ext-False-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0.100000000)-ext-False-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0.100000000)-ext-False-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0.100000000)-ext-False-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0.100000000)-ext-False-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0.100000000)-ext-False-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0.100000000)-ext-False-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0.100000000)-ext-False-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0.100000000)-ext-True-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0.100000000)-ext-True-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0.100000000)-ext-True-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0.100000000)-ext-True-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0.100000000)-ext-True-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0.100000000)-ext-True-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0.100000000)-ext-True-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-0.100000000)-ext-True-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1)-ext-False-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1)-ext-False-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1)-ext-False-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1)-ext-False-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1)-ext-False-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1)-ext-False-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1)-ext-False-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1)-ext-False-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1)-ext-True-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1)-ext-True-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1)-ext-True-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1)-ext-True-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1)-ext-True-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1)-ext-True-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1)-ext-True-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1)-ext-True-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1.5)-ext-False-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1.5)-ext-False-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1.5)-ext-False-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1.5)-ext-False-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1.5)-ext-False-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1.5)-ext-False-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1.5)-ext-False-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1.5)-ext-False-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1.5)-ext-True-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1.5)-ext-True-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1.5)-ext-True-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1.5)-ext-True-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1.5)-ext-True-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1.5)-ext-True-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1.5)-ext-True-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-1.5)-ext-True-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-10)-ext-False-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-10)-ext-False-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-10)-ext-False-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-10)-ext-False-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-10)-ext-False-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-10)-ext-False-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-10)-ext-False-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-10)-ext-False-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-10)-ext-True-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-10)-ext-True-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-10)-ext-True-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-10)-ext-True-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-10)-ext-True-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-10)-ext-True-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-10)-ext-True-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-10)-ext-True-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-2)-ext-False-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-2)-ext-False-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-2)-ext-False-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-2)-ext-False-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-2)-ext-False-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-2)-ext-False-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-2)-ext-False-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-2)-ext-False-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-2)-ext-True-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-2)-ext-True-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-2)-ext-True-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-2)-ext-True-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-2)-ext-True-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-2)-ext-True-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-2)-ext-True-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-False-(-1-2)-ext-True-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0)-ext-False-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0)-ext-False-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0)-ext-False-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0)-ext-False-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0)-ext-False-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0)-ext-False-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0)-ext-False-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0)-ext-False-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0)-ext-True-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0)-ext-True-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0)-ext-True-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0)-ext-True-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0)-ext-True-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0)-ext-True-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0)-ext-True-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0)-ext-True-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0.100000000)-ext-False-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0.100000000)-ext-False-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0.100000000)-ext-False-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0.100000000)-ext-False-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0.100000000)-ext-False-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0.100000000)-ext-False-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0.100000000)-ext-False-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0.100000000)-ext-False-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0.100000000)-ext-True-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0.100000000)-ext-True-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0.100000000)-ext-True-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0.100000000)-ext-True-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0.100000000)-ext-True-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0.100000000)-ext-True-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0.100000000)-ext-True-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-0.100000000)-ext-True-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-10)-ext-False-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-10)-ext-False-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-10)-ext-False-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-10)-ext-False-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-10)-ext-False-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-10)-ext-False-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-10)-ext-False-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-10)-ext-False-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-10)-ext-True-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-10)-ext-True-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-10)-ext-True-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-10)-ext-True-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-10)-ext-True-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-10)-ext-True-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-10)-ext-True-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-10)-ext-True-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-2)-ext-False-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-2)-ext-False-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-2)-ext-False-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-2)-ext-False-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-2)-ext-False-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-2)-ext-False-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-2)-ext-False-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-2)-ext-False-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-2)-ext-True-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-2)-ext-True-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-2)-ext-True-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-2)-ext-True-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-2)-ext-True-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-2)-ext-True-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-2)-ext-True-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes-True-(-1-2)-ext-True-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes_1 +1 -0
- densitty-0.9.0/tests/goldens/test_axes_2 +1 -0
- densitty-0.9.0/tests/goldens/test_axes_3 +1 -0
- densitty-0.9.0/tests/goldens/test_axes_ascii-False-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes_ascii-False-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes_ascii-False-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes_ascii-False-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes_ascii-False-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes_ascii-False-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes_ascii-False-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes_ascii-False-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes_ascii-True-False-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes_ascii-True-False-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes_ascii-True-False-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes_ascii-True-False-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes_ascii-True-True-False-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes_ascii-True-True-False-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes_ascii-True-True-True-False +1 -0
- densitty-0.9.0/tests/goldens/test_axes_ascii-True-True-True-True +1 -0
- densitty-0.9.0/tests/goldens/test_axes_invalid_1 +1 -0
- densitty-0.9.0/tests/goldens/test_axes_single_pixel +1 -0
- densitty-0.9.0/tests/goldens/test_histplot2d_1 +1 -0
- densitty-0.9.0/tests/goldens/test_histplot2d_3 +1 -0
- densitty-0.9.0/tests/goldens/test_histplot2d_4 +1 -0
- densitty-0.9.0/tests/goldens/test_maxsize_fitscreen +1 -0
- densitty-0.9.0/tests/goldens/test_maxsize_set_default_size +1 -0
- densitty-0.9.0/tests/goldens/test_single_data +1 -0
- densitty-0.9.0/tests/goldens/test_single_valued_data +1 -0
- densitty-0.9.0/tests/goldens/test_smooth_data_1 +1 -0
- densitty-0.9.0/tests/goldens/test_smooth_data_1_x_axis +1 -0
- densitty-0.9.0/tests/goldens/test_smooth_data_1_y_axis +1 -0
- densitty-0.9.0/tests/goldens/test_smooth_data_2 +1 -0
- densitty-0.9.0/tests/goldens/test_smooth_data_2_x_axis +1 -0
- densitty-0.9.0/tests/goldens/test_smooth_data_2_y_axis +1 -0
- densitty-0.9.0/tests/goldens/test_smooth_data_3 +1 -0
- densitty-0.9.0/tests/goldens/test_smooth_data_3_x_axis +1 -0
- densitty-0.9.0/tests/goldens/test_smooth_data_3_y_axis +1 -0
- densitty-0.9.0/tests/goldens/x_axis_100_-0.0819162998_510.002284_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_100_-0.0819162998_510.002284_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_100_0.0194307864_0.0194307906_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_100_0.0194307864_0.0194307906_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_101_1.42762354E-8_25.8269209_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_101_1.42762354E-8_25.8269209_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_102_1670249.07_2864582.59_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_102_1670249.07_2864582.59_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_103_1.89783411E-8_1.85232704E+9_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_103_1.89783411E-8_1.85232704E+9_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_104_1.73938891E-7_3790422.49_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_104_1.73938891E-7_3790422.49_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_105_1.68750941E-8_0.796975597_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_105_1.68750941E-8_0.796975597_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_105_5.09236527E-8_9.66938005_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_105_5.09236527E-8_9.66938005_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_109_-2.96955623E-10_83.0330135_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_109_-2.96955623E-10_83.0330135_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_109_-6.81808565E-9_5.14837567E-8_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_109_-6.81808565E-9_5.14837567E-8_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_110_10.0967520_10.0967520_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_110_10.0967520_10.0967520_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_111_-4.93860860E-9_1.38921000E-7_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_111_-4.93860860E-9_1.38921000E-7_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_112_-32410436.8_-32410436.8_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_112_-32410436.8_-32410436.8_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_113_-504327.128_-504326.751_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_113_-504327.128_-504326.751_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_116_-1.50971589E-7_0.0105108249_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_116_-1.50971589E-7_0.0105108249_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_118_2.20802474E-10_6.52519242E-10_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_118_2.20802474E-10_6.52519242E-10_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_119_-0.000605219562_139019378_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_119_-0.000605219562_139019378_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_119_0.00198534542_0.00198534573_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_119_0.00198534542_0.00198534573_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_11_1.96692248E-8_0.00820748193_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_11_1.96692248E-8_0.00820748193_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_129_2.59739235E-9_965070365_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_129_2.59739235E-9_965070365_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_131_0.145524462_4.65087154E+9_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_131_0.145524462_4.65087154E+9_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_135_-0.0000229191696_2267.64355_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_135_-0.0000229191696_2267.64355_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_135_1.22598302E-8_8.04329142E-8_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_135_1.22598302E-8_8.04329142E-8_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_141_-2.14314230E-7_19791.9707_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_141_-2.14314230E-7_19791.9707_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_141_3.41218635E-9_0.000593451723_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_141_3.41218635E-9_0.000593451723_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_143_2.69365458E-7_1.93715817_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_143_2.69365458E-7_1.93715817_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_145_-0.000773494593_8763857.68_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_145_-0.000773494593_8763857.68_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_145_-1.75397138E+9_-1.75397138E+9_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_145_-1.75397138E+9_-1.75397138E+9_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_148_0.00935627980_42504.9078_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_148_0.00935627980_42504.9078_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_153_-0.114808950_-0.114672276_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_153_-0.114808950_-0.114672276_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_153_-661104672_-661104672_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_153_-661104672_-661104672_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_154_-187.732088_-187.730832_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_154_-187.732088_-187.730832_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_156_-22304704.4_-20842350.2_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_156_-22304704.4_-20842350.2_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_157_-3.50954588E-10_947.964004_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_157_-3.50954588E-10_947.964004_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_158_-1234211.79_-1234211.70_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_158_-1234211.79_-1234211.70_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_160_194487990_194494183_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_160_194487990_194494183_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_162_-185285035_-185285035_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_162_-185285035_-185285035_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_164_33859.0360_33859.0944_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_164_33859.0360_33859.0944_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_166_67.3265318_75019876.3_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_166_67.3265318_75019876.3_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_167_4.45843689E-10_652665182_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_167_4.45843689E-10_652665182_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_168_3.26337097E-8_793724.663_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_168_3.26337097E-8_793724.663_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_169_-1.37817983E-7_115283107_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_169_-1.37817983E-7_115283107_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_169_25.1180938_31.9108379_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_169_25.1180938_31.9108379_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_172_-3329659.06_-3329659.06_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_172_-3329659.06_-3329659.06_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_172_19.8982303_4.98789640E+9_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_172_19.8982303_4.98789640E+9_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_176_98529298.9_98529299.0_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_176_98529298.9_98529299.0_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_177_0.0992866123_5373.66561_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_177_0.0992866123_5373.66561_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_180_-1358.72046_-1358.71997_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_180_-1358.72046_-1358.71997_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_187_-0.00362557327_243858998_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_187_-0.00362557327_243858998_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_188_0.000735951891_0.000743931104_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_188_0.000735951891_0.000743931104_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_189_3.52864510_3.52875891_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_189_3.52864510_3.52875891_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_190_2.22673610E-7_0.00903559932_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_190_2.22673610E-7_0.00903559932_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_191_0.000194623302_3.75022510_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_191_0.000194623302_3.75022510_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_196_-20.8607706_-20.8607561_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_196_-20.8607706_-20.8607561_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_196_-3592221.71_-3592221.71_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_196_-3592221.71_-3592221.71_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_198_75308.2184_409641.537_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_198_75308.2184_409641.537_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_21_-10.3544087_1086.65585_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_21_-10.3544087_1086.65585_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_26_-1.47776457E-10_2697757.41_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_26_-1.47776457E-10_2697757.41_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_29_-0.418828618_-0.418813422_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_29_-0.418828618_-0.418813422_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_36_-0.143016182_-0.121454748_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_36_-0.143016182_-0.121454748_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_37_-2.02514159E-9_0.0449531366_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_37_-2.02514159E-9_0.0449531366_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_39_-0.000161165673_-0.000160874037_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_39_-0.000161165673_-0.000160874037_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_3_0.00000979906217_0.000360412287_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_3_0.00000979906217_0.000360412287_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_45_99167646.7_99167646.7_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_45_99167646.7_99167646.7_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_46_-0.00000321721634_-0.00000321459619_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_46_-0.00000321721634_-0.00000321459619_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_46_0.00000291015154_0.733200207_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_46_0.00000291015154_0.733200207_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_48_-2.23566201E-7_74131862.3_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_48_-2.23566201E-7_74131862.3_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_48_-3.46356324E+9_-3.46286549E+9_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_48_-3.46356324E+9_-3.46286549E+9_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_48_-5.73379077E-7_0.0000146411803_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_48_-5.73379077E-7_0.0000146411803_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_48_7.83507705_7.83514258_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_48_7.83507705_7.83514258_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_4_-1099.01594_-1097.97364_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_4_-1099.01594_-1097.97364_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_50_-5675725.76_-5591838.17_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_50_-5675725.76_-5591838.17_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_53_0.499461762_0.499470226_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_53_0.499461762_0.499470226_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_56_1348178.28_1348178.28_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_56_1348178.28_1348178.28_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_60_1572.09156_1572.09156_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_60_1572.09156_1572.09156_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_62_0.0000834552114_162044199_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_62_0.0000834552114_162044199_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_68_-64.8155821_-64.8153334_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_68_-64.8155821_-64.8153334_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_76_100.966337_100.966349_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_76_100.966337_100.966349_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_78_-0.0000147372573_-0.0000147370017_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_78_-0.0000147372573_-0.0000147370017_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_7_1.49865727E-9_1.06805033_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_7_1.49865727E-9_1.06805033_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_80_-0.000259728201_6.72258436_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_80_-0.000259728201_6.72258436_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_80_19.4507640_868.195082_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_80_19.4507640_868.195082_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_84_228572.332_228572.332_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_84_228572.332_228572.332_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_86_-2.04771899E+9_-2.04771899E+9_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_86_-2.04771899E+9_-2.04771899E+9_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_86_1724.60078_1724.60078_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_86_1724.60078_1724.60078_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_86_9.56108668E-9_0.0000741047291_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_86_9.56108668E-9_0.0000741047291_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_88_-4.62043384E-9_0.00645016333_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_88_-4.62043384E-9_0.00645016333_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_89_0.00230228979_0.00230229174_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_89_0.00230228979_0.00230229174_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_89_8.49639722E-8_8.81452078E-8_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_89_8.49639722E-8_8.81452078E-8_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_8_-16602642.5_-16601902.4_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_8_-16602642.5_-16601902.4_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_8_-3716374.14_-3716374.02_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_8_-3716374.14_-3716374.02_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_8_0.850889413_38.8443390_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_8_0.850889413_38.8443390_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_8_2191761.87_2191772.44_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_8_2191761.87_2191772.44_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_90_-882580.430_-882580.430_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_90_-882580.430_-882580.430_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_91_-5.88268935_-5.88264807_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_91_-5.88268935_-5.88264807_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_93_-0.00790606166_17905215.6_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_93_-0.00790606166_17905215.6_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_93_-0.0503566340_177.327115_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_93_-0.0503566340_177.327115_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_99_2.90983509E-9_10613370.5_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_99_2.90983509E-9_10613370.5_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_9_-0.0000214145534_6521844.58_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_9_-0.0000214145534_6521844.58_1 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_9_0.124174552_7.78910615_0 +1 -0
- densitty-0.9.0/tests/goldens/x_axis_9_0.124174552_7.78910615_1 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_100_-0.0819162998_510.002284 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_100_0.0194307864_0.0194307906 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_101_1.42762354E-8_25.8269209 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_102_1670249.07_2864582.59 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_103_1.89783411E-8_1.85232704E+9 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_104_1.73938891E-7_3790422.49 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_105_1.68750941E-8_0.796975597 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_105_5.09236527E-8_9.66938005 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_109_-2.96955623E-10_83.0330135 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_109_-6.81808565E-9_5.14837567E-8 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_110_10.0967520_10.0967520 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_111_-4.93860860E-9_1.38921000E-7 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_112_-32410436.8_-32410436.8 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_113_-504327.128_-504326.751 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_116_-1.50971589E-7_0.0105108249 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_118_2.20802474E-10_6.52519242E-10 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_119_-0.000605219562_139019378 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_119_0.00198534542_0.00198534573 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_11_1.96692248E-8_0.00820748193 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_129_2.59739235E-9_965070365 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_131_0.145524462_4.65087154E+9 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_135_-0.0000229191696_2267.64355 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_135_1.22598302E-8_8.04329142E-8 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_141_-2.14314230E-7_19791.9707 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_141_3.41218635E-9_0.000593451723 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_143_2.69365458E-7_1.93715817 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_145_-0.000773494593_8763857.68 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_145_-1.75397138E+9_-1.75397138E+9 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_148_0.00935627980_42504.9078 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_153_-0.114808950_-0.114672276 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_153_-661104672_-661104672 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_154_-187.732088_-187.730832 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_156_-22304704.4_-20842350.2 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_157_-3.50954588E-10_947.964004 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_158_-1234211.79_-1234211.70 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_160_194487990_194494183 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_162_-185285035_-185285035 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_164_33859.0360_33859.0944 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_166_67.3265318_75019876.3 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_167_4.45843689E-10_652665182 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_168_3.26337097E-8_793724.663 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_169_-1.37817983E-7_115283107 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_169_25.1180938_31.9108379 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_172_-3329659.06_-3329659.06 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_172_19.8982303_4.98789640E+9 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_176_98529298.9_98529299.0 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_177_0.0992866123_5373.66561 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_180_-1358.72046_-1358.71997 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_187_-0.00362557327_243858998 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_188_0.000735951891_0.000743931104 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_189_3.52864510_3.52875891 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_190_2.22673610E-7_0.00903559932 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_191_0.000194623302_3.75022510 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_196_-20.8607706_-20.8607561 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_196_-3592221.71_-3592221.71 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_198_75308.2184_409641.537 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_21_-10.3544087_1086.65585 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_26_-1.47776457E-10_2697757.41 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_29_-0.418828618_-0.418813422 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_36_-0.143016182_-0.121454748 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_37_-2.02514159E-9_0.0449531366 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_39_-0.000161165673_-0.000160874037 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_3_0.00000979906217_0.000360412287 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_45_99167646.7_99167646.7 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_46_-0.00000321721634_-0.00000321459619 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_46_0.00000291015154_0.733200207 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_48_-2.23566201E-7_74131862.3 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_48_-3.46356324E+9_-3.46286549E+9 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_48_-5.73379077E-7_0.0000146411803 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_48_7.83507705_7.83514258 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_4_-1099.01594_-1097.97364 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_50_-5675725.76_-5591838.17 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_53_0.499461762_0.499470226 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_56_1348178.28_1348178.28 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_60_1572.09156_1572.09156 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_62_0.0000834552114_162044199 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_68_-64.8155821_-64.8153334 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_76_100.966337_100.966349 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_78_-0.0000147372573_-0.0000147370017 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_7_1.49865727E-9_1.06805033 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_80_-0.000259728201_6.72258436 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_80_19.4507640_868.195082 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_84_228572.332_228572.332 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_86_-2.04771899E+9_-2.04771899E+9 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_86_1724.60078_1724.60078 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_86_9.56108668E-9_0.0000741047291 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_88_-4.62043384E-9_0.00645016333 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_89_0.00230228979_0.00230229174 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_89_8.49639722E-8_8.81452078E-8 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_8_-16602642.5_-16601902.4 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_8_-3716374.14_-3716374.02 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_8_0.850889413_38.8443390 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_8_2191761.87_2191772.44 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_90_-882580.430_-882580.430 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_91_-5.88268935_-5.88264807 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_93_-0.00790606166_17905215.6 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_93_-0.0503566340_177.327115 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_99_2.90983509E-9_10613370.5 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_9_-0.0000214145534_6521844.58 +1 -0
- densitty-0.9.0/tests/goldens/y_axis_9_0.124174552_7.78910615 +1 -0
- densitty-0.9.0/tests/helper_tests.py +59 -0
- densitty-0.9.0/tests/label_tests.py +137 -0
- densitty-0.9.0/tests/smoothing_tests.py +103 -0
- densitty-0.9.0/tests/util_tests.py +22 -0
- densitty-0.8.2/Makefile +0 -57
- densitty-0.8.2/PKG-INFO +0 -36
- densitty-0.8.2/README.md +0 -14
- densitty-0.8.2/densitty/axis.py +0 -265
- densitty-0.8.2/densitty/binning.py +0 -240
- densitty-0.8.2/densitty/detect.py +0 -465
- densitty-0.8.2/densitty/plot.py +0 -201
- densitty-0.8.2/densitty/truecolor.py +0 -170
- densitty-0.8.2/densitty/util.py +0 -234
- densitty-0.8.2/densitty.egg-info/PKG-INFO +0 -36
- densitty-0.8.2/densitty.egg-info/SOURCES.txt +0 -322
- densitty-0.8.2/docs/FAQ.md +0 -12
- densitty-0.8.2/pyproject.toml +0 -71
- densitty-0.8.2/tests/axis_tests.py +0 -160
- densitty-0.8.2/tests/color_tests.py +0 -129
- densitty-0.8.2/tests/golden.py +0 -31
- densitty-0.8.2/tests/golden_diff.py +0 -171
- densitty-0.8.2/tests/goldens/merge_chars +0 -1
- densitty-0.8.2/tests/goldens/merge_lines +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0)-ext-False-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0)-ext-False-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0)-ext-False-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0)-ext-False-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0)-ext-False-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0)-ext-False-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0)-ext-False-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0)-ext-False-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0)-ext-True-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0)-ext-True-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0)-ext-True-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0)-ext-True-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0)-ext-True-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0)-ext-True-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0)-ext-True-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0)-ext-True-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0.1)-ext-False-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0.1)-ext-False-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0.1)-ext-False-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0.1)-ext-False-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0.1)-ext-False-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0.1)-ext-False-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0.1)-ext-False-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0.1)-ext-False-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0.1)-ext-True-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0.1)-ext-True-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0.1)-ext-True-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0.1)-ext-True-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0.1)-ext-True-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0.1)-ext-True-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0.1)-ext-True-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-0.1)-ext-True-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1)-ext-False-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1)-ext-False-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1)-ext-False-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1)-ext-False-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1)-ext-False-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1)-ext-False-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1)-ext-False-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1)-ext-False-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1)-ext-True-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1)-ext-True-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1)-ext-True-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1)-ext-True-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1)-ext-True-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1)-ext-True-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1)-ext-True-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1)-ext-True-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1.5)-ext-False-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1.5)-ext-False-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1.5)-ext-False-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1.5)-ext-False-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1.5)-ext-False-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1.5)-ext-False-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1.5)-ext-False-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1.5)-ext-False-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1.5)-ext-True-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1.5)-ext-True-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1.5)-ext-True-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1.5)-ext-True-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1.5)-ext-True-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1.5)-ext-True-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1.5)-ext-True-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-1.5)-ext-True-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-10)-ext-False-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-10)-ext-False-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-10)-ext-False-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-10)-ext-False-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-10)-ext-False-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-10)-ext-False-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-10)-ext-False-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-10)-ext-False-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-10)-ext-True-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-10)-ext-True-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-10)-ext-True-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-10)-ext-True-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-10)-ext-True-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-10)-ext-True-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-10)-ext-True-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-10)-ext-True-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-2)-ext-False-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-2)-ext-False-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-2)-ext-False-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-2)-ext-False-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-2)-ext-False-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-2)-ext-False-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-2)-ext-False-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-2)-ext-False-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-2)-ext-True-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-2)-ext-True-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-2)-ext-True-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-2)-ext-True-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-2)-ext-True-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-2)-ext-True-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-2)-ext-True-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-False-(-1-2)-ext-True-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0)-ext-False-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0)-ext-False-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0)-ext-False-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0)-ext-False-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0)-ext-False-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0)-ext-False-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0)-ext-False-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0)-ext-False-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0)-ext-True-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0)-ext-True-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0)-ext-True-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0)-ext-True-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0)-ext-True-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0)-ext-True-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0)-ext-True-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0)-ext-True-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0.1)-ext-False-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0.1)-ext-False-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0.1)-ext-False-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0.1)-ext-False-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0.1)-ext-False-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0.1)-ext-False-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0.1)-ext-False-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0.1)-ext-False-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0.1)-ext-True-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0.1)-ext-True-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0.1)-ext-True-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0.1)-ext-True-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0.1)-ext-True-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0.1)-ext-True-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0.1)-ext-True-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-0.1)-ext-True-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-10)-ext-False-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-10)-ext-False-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-10)-ext-False-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-10)-ext-False-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-10)-ext-False-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-10)-ext-False-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-10)-ext-False-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-10)-ext-False-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-10)-ext-True-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-10)-ext-True-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-10)-ext-True-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-10)-ext-True-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-10)-ext-True-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-10)-ext-True-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-10)-ext-True-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-10)-ext-True-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-2)-ext-False-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-2)-ext-False-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-2)-ext-False-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-2)-ext-False-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-2)-ext-False-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-2)-ext-False-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-2)-ext-False-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-2)-ext-False-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-2)-ext-True-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-2)-ext-True-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-2)-ext-True-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-2)-ext-True-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-2)-ext-True-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-2)-ext-True-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-2)-ext-True-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes-True-(-1-2)-ext-True-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes_ascii-False-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes_ascii-False-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes_ascii-False-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes_ascii-False-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes_ascii-False-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes_ascii-False-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes_ascii-False-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes_ascii-False-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes_ascii-True-False-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes_ascii-True-False-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes_ascii-True-False-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes_ascii-True-False-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes_ascii-True-True-False-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes_ascii-True-True-False-True +0 -1
- densitty-0.8.2/tests/goldens/test_axes_ascii-True-True-True-False +0 -1
- densitty-0.8.2/tests/goldens/test_axes_ascii-True-True-True-True +0 -1
- densitty-0.8.2/tests/goldens/test_histplot2d_1 +0 -1
- densitty-0.8.2/tests/goldens/test_histplot2d_3 +0 -1
- densitty-0.8.2/tests/goldens/test_histplot2d_4 +0 -1
- densitty-0.8.2/tests/goldens/test_maxsize_fitscreen +0 -1
- densitty-0.8.2/tests/goldens/test_maxsize_set_default_size +0 -1
- densitty-0.8.2/tests/goldens/test_single_data +0 -1
- densitty-0.8.2/tests/goldens/test_single_valued_data +0 -1
- densitty-0.8.2/tests/helper_tests.py +0 -50
- densitty-0.8.2/tests/util_tests.py +0 -10
- {densitty-0.8.2 → densitty-0.9.0}/.gitignore +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/LICENSE +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/densitty/__init__.py +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/densitty/ansi.py +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/densitty/ascii_art.py +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/densitty/lineart.py +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/densitty.egg-info/dependency_links.txt +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/densitty.egg-info/top_level.txt +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/docs/examples.md +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/docs/eyeplot.png +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/docs/hist2d-axes.png +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/docs/hist2d-basic.png +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/docs/hist2d-finer-color-borderline.png +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/docs/hist2d-helper.png +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/docs/hist2d-scaled.png +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/docs/inline-histplot2d.png +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/docs/terminal_support.md +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/docs/usage.md +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/examples/eye_plot.py +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/examples/run_examples.py +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/setup.cfg +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/#lineart_tests.py# +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/binning_tests.py +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/convert_tests.py +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/detect_tests.py +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/gen_norm_data.py +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/ansi.BLUE_RED +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/ansi.BLUE_RED_halfheight +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/ansi.COOL +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/ansi.COOL_halfheight +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/ansi.FADE_IN +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/ansi.FADE_IN_halfheight +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/ansi.GRAYSCALE +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/ansi.GRAYSCALE_halfheight +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/ansi.HOT +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/ansi.HOT_halfheight +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/ansi.RAINBOW +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/ansi.RAINBOW_16 +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/ansi.RAINBOW_16_halfheight +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/ansi.RAINBOW_halfheight +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/ascii-map +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/auto_allzero +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/auto_color_limits +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/halfheight +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/halfheight_single_row +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/simple_glyph_ascii +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/simple_glyph_basic +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/simple_glyph_extended +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1)-ext-False-False-False-False +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1)-ext-False-False-False-True +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1)-ext-False-False-True-False +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1)-ext-False-False-True-True +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1)-ext-False-True-False-False +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1)-ext-False-True-False-True +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1)-ext-False-True-True-False +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1)-ext-False-True-True-True +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1)-ext-True-False-False-False +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1)-ext-True-False-False-True +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1)-ext-True-False-True-False +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1)-ext-True-False-True-True +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1)-ext-True-True-False-False +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1)-ext-True-True-False-True +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1)-ext-True-True-True-False +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1)-ext-True-True-True-True +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1.5)-ext-False-False-False-False +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1.5)-ext-False-False-False-True +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1.5)-ext-False-False-True-False +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1.5)-ext-False-False-True-True +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1.5)-ext-False-True-False-False +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1.5)-ext-False-True-False-True +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1.5)-ext-False-True-True-False +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1.5)-ext-False-True-True-True +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1.5)-ext-True-False-False-False +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1.5)-ext-True-False-False-True +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1.5)-ext-True-False-True-False +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1.5)-ext-True-False-True-True +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1.5)-ext-True-True-False-False +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1.5)-ext-True-True-False-True +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1.5)-ext-True-True-True-False +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes-True-(-1-1.5)-ext-True-True-True-True +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes_labelsgiven +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_axes_small +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_bin_data_1 +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_bin_data_2 +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_bin_data_3 +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_bin_data_unaligned +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_binning_auto_spec_range_1 +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_binning_drop_data +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_binning_edge_1 +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_binning_edge_2 +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_binning_fixed_1 +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_binning_fixed_2 +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_binning_no_drop_data +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_binning_provide_edges +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_binning_simple_1 +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_binning_simple_2 +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_border_nonhist_toscreen +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_empty_data +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_histplot2d_2 +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_maxsize_fitscreen_noaxes +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_maxsize_keepaspect +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_maxsize_reservemargin +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/test_simple_hist_toscreen +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/truecolor.BLUE_RED +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/truecolor.BLUE_RED_halfheight +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/truecolor.COOL +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/truecolor.COOL_halfheight +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/truecolor.FADE_IN +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/truecolor.FADE_IN_halfheight +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/truecolor.GRAYSCALE +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/truecolor.GRAYSCALE_LINEAR +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/truecolor.GRAYSCALE_LINEAR_halfheight +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/truecolor.GRAYSCALE_halfheight +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/truecolor.HOT +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/truecolor.HOT_halfheight +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/truecolor.RAINBOW +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/goldens/truecolor.RAINBOW_halfheight +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/lineart_tests.py +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/numpy_tests.py +0 -0
- {densitty-0.8.2 → densitty-0.9.0}/tests/scale_tests.py +0 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Presubmit Lint/Format/Type checking
|
|
2
|
+
# For documentation on GitHub Actions Workflows, see:
|
|
3
|
+
# https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
|
|
4
|
+
name: Checks
|
|
5
|
+
on:
|
|
6
|
+
pull_request:
|
|
7
|
+
types: [opened, synchronize, reopened]
|
|
8
|
+
branches: [main]
|
|
9
|
+
push:
|
|
10
|
+
branches: [main]
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
checks:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
defaults:
|
|
16
|
+
run:
|
|
17
|
+
shell: bash
|
|
18
|
+
steps:
|
|
19
|
+
- name: Check out
|
|
20
|
+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
|
|
21
|
+
with:
|
|
22
|
+
fetch-depth: 0 # Needed for setuptools_scm to work correctly
|
|
23
|
+
|
|
24
|
+
- name: Install uv
|
|
25
|
+
uses: astral-sh/setup-uv@681c641aba71e4a1c380be3ab5e12ad51f415867
|
|
26
|
+
|
|
27
|
+
- name: Set up Python 3.14
|
|
28
|
+
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548
|
|
29
|
+
with:
|
|
30
|
+
python-version: 3.14
|
|
31
|
+
allow-prereleases: true
|
|
32
|
+
|
|
33
|
+
- name: Install the project
|
|
34
|
+
run: uv sync --all-extras --dev
|
|
35
|
+
|
|
36
|
+
- name: Run lint
|
|
37
|
+
run: uv run --with pylint python -m pylint --ignore util.pyi densitty
|
|
38
|
+
|
|
39
|
+
- name: Check format
|
|
40
|
+
run: uv run --with black python -m black -l 99 --check densitty/*.py tests/*.py
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Test on 3.10-3.15 on all platforms, weekly, just in case something breaks on
|
|
2
|
+
# intermediate or beta python versions.
|
|
3
|
+
|
|
4
|
+
# For documentation on GitHub Actions Workflows, see:
|
|
5
|
+
# https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
|
|
6
|
+
name: PeriodicTests
|
|
7
|
+
on:
|
|
8
|
+
schedule:
|
|
9
|
+
- cron: "40 4 2,9,16,22 * *"
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
test_schedule:
|
|
13
|
+
strategy:
|
|
14
|
+
matrix:
|
|
15
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
16
|
+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.14t", "3.15"]
|
|
17
|
+
fail-fast: false
|
|
18
|
+
|
|
19
|
+
runs-on: ${{ matrix.os }}
|
|
20
|
+
defaults:
|
|
21
|
+
run:
|
|
22
|
+
shell: bash
|
|
23
|
+
steps:
|
|
24
|
+
- name: Check out
|
|
25
|
+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
|
|
26
|
+
with:
|
|
27
|
+
fetch-depth: 0 # Needed for setuptools_scm to work correctly
|
|
28
|
+
|
|
29
|
+
- name: Install uv
|
|
30
|
+
uses: astral-sh/setup-uv@681c641aba71e4a1c380be3ab5e12ad51f415867
|
|
31
|
+
|
|
32
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
33
|
+
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548
|
|
34
|
+
with:
|
|
35
|
+
python-version: ${{ matrix.python-version }}
|
|
36
|
+
allow-prereleases: true
|
|
37
|
+
|
|
38
|
+
- name: Install the project
|
|
39
|
+
run: uv sync --all-extras --dev
|
|
40
|
+
|
|
41
|
+
- name: Run tests
|
|
42
|
+
run: make test-ci
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Pre-submit testing, for Python 3.10 and 3.14 on Linux/Mac/Windows
|
|
2
|
+
# For documentation on GitHub Actions Workflows, see:
|
|
3
|
+
# https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
|
|
4
|
+
name: Tests
|
|
5
|
+
on:
|
|
6
|
+
pull_request:
|
|
7
|
+
types: [opened, synchronize, reopened]
|
|
8
|
+
branches: [main]
|
|
9
|
+
push:
|
|
10
|
+
branches: [main]
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
tests:
|
|
14
|
+
strategy:
|
|
15
|
+
matrix:
|
|
16
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
17
|
+
python-version: ["3.10", "3.14", "3.14t"]
|
|
18
|
+
fail-fast: false
|
|
19
|
+
|
|
20
|
+
runs-on: ${{ matrix.os }}
|
|
21
|
+
defaults:
|
|
22
|
+
run:
|
|
23
|
+
shell: bash
|
|
24
|
+
steps:
|
|
25
|
+
- name: Check out
|
|
26
|
+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
|
|
27
|
+
with:
|
|
28
|
+
fetch-depth: 0 # Needed for setuptools_scm to work correctly
|
|
29
|
+
|
|
30
|
+
- name: Install uv
|
|
31
|
+
uses: astral-sh/setup-uv@681c641aba71e4a1c380be3ab5e12ad51f415867
|
|
32
|
+
|
|
33
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
34
|
+
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548
|
|
35
|
+
with:
|
|
36
|
+
python-version: ${{ matrix.python-version }}
|
|
37
|
+
allow-prereleases: true
|
|
38
|
+
|
|
39
|
+
- name: Install the project
|
|
40
|
+
run: uv sync --all-extras --dev
|
|
41
|
+
|
|
42
|
+
- name: Run tests
|
|
43
|
+
run: make test-ci
|
densitty-0.9.0/Makefile
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#TEST_PACKAGES := numpy,pytest,readchar,rich
|
|
2
|
+
|
|
3
|
+
.PHONY: test-ci
|
|
4
|
+
test-ci:
|
|
5
|
+
PYTHONPATH=. uv run python -m pytest tests/*.py
|
|
6
|
+
|
|
7
|
+
.PHONY: test
|
|
8
|
+
test: test-ci ## Add output to show current test coverage, but no report
|
|
9
|
+
PYTHONPATH=. uv run python -m pytest --cov=densitty tests/*.py
|
|
10
|
+
|
|
11
|
+
.PHONY: testcov
|
|
12
|
+
testcov: ## Output test coverage report
|
|
13
|
+
PYTHONPATH=. uv run python -m pytest --cov=densitty --cov-report=html tests/*.py
|
|
14
|
+
|
|
15
|
+
.PHONY: golden-accept
|
|
16
|
+
golden-accept:
|
|
17
|
+
PYTHONPATH=. uv run python tests/golden_diff.py
|
|
18
|
+
|
|
19
|
+
.PHONY: lint
|
|
20
|
+
lint:
|
|
21
|
+
## Ignore stub file, as it seems to confuse pylint
|
|
22
|
+
PYTHONPATH=. uv run python -m pylint --ignore util.pyi densitty
|
|
23
|
+
|
|
24
|
+
.PHONY: format
|
|
25
|
+
format:
|
|
26
|
+
uv run python -m black -l 99 densitty/*.py
|
|
27
|
+
uv run python -m black -l 99 tests/*.py
|
|
28
|
+
|
|
29
|
+
.PHONY: check-format
|
|
30
|
+
check-format:
|
|
31
|
+
uv run python -m black -l 99 --check densitty/*.py tests/*.py
|
|
32
|
+
|
|
33
|
+
.PHONY: typecheck
|
|
34
|
+
typecheck:
|
|
35
|
+
PYTHONPATH=. uv run python -m mypy densitty
|
|
36
|
+
PYTHONPATH=. uv run python -m mypy tests/numpy_tests.py
|
|
37
|
+
PYTHONPATH=. uv run python -m mypy tests/axis_tests.py
|
|
38
|
+
|
|
39
|
+
.PHONY: check ## essentially the same as the presubmit checks
|
|
40
|
+
check: lint check-format typecheck test
|
|
41
|
+
|
|
42
|
+
.PHONY: colors
|
|
43
|
+
colors:
|
|
44
|
+
PYTHONPATH=. uv run python tests/color_tests.py
|
|
45
|
+
|
|
46
|
+
.PHONY: build
|
|
47
|
+
build: ## Build wheel file
|
|
48
|
+
rm -rf ./dist
|
|
49
|
+
uvx --from build pyproject-build --installer uv
|
|
50
|
+
|
|
51
|
+
.PHONY: tag
|
|
52
|
+
tag: ## Add a Git tag and push it to origin with syntax: make tag TAG=tag_name
|
|
53
|
+
ifeq ($(origin TAG),undefined)
|
|
54
|
+
$(error "ERROR: use like 'make tag TAG=tag_name'")
|
|
55
|
+
else
|
|
56
|
+
@echo "Creating git tag: ${TAG}"
|
|
57
|
+
git tag -a ${TAG} -m ""
|
|
58
|
+
@echo "Pushing tag to origin: ${TAG}"
|
|
59
|
+
git push origin ${TAG}
|
|
60
|
+
endif
|
|
61
|
+
|
|
62
|
+
.PHONY: publish-test
|
|
63
|
+
publish-test: build
|
|
64
|
+
@echo "Publishing to testpypi"
|
|
65
|
+
uvx twine upload --repository testpypi dist/*
|
|
66
|
+
|
|
67
|
+
.PHONY: publish
|
|
68
|
+
publish: build
|
|
69
|
+
@echo "Publishing to REAL pypi"
|
|
70
|
+
uvx twine upload dist/*
|
densitty-0.9.0/PKG-INFO
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: densitty
|
|
3
|
+
Version: 0.9.0
|
|
4
|
+
Summary: densitty - create textual 2-D density plots, heatmaps, and 2-D histograms in Python
|
|
5
|
+
Author: Bill Tompkins
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/BillTompkins/densitty
|
|
8
|
+
Keywords: densitty,ascii,ascii-art,plotting,terminal,Python
|
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
19
|
+
Classifier: Programming Language :: Python :: Free Threading :: 3 - Stable
|
|
20
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Dynamic: license-file
|
|
25
|
+
|
|
26
|
+
<h1 align="center">densitty</h1>
|
|
27
|
+
<h2 align="center"> Terminal-based 2-D Histogram, Density Plots, and Heatmaps</h2>
|
|
28
|
+
|
|
29
|
+
Generate 2-D histograms (density plots, heat maps, eye diagrams) similar to [matplotlib's hist2d](https://matplotlib.org/stable/gallery/statistics/hist.html "hist2d"), but with output in the terminal, and no external dependencies.
|
|
30
|
+
|
|
31
|
+

|
|
32
|
+
|
|
33
|
+
## [Examples/Gallery](https://billtompkins.github.io/densitty/docs/examples.html)
|
|
34
|
+
|
|
35
|
+
## [Sub-modules / Usage Notes](https://billtompkins.github.io/densitty/docs/usage.html)
|
|
36
|
+
|
|
37
|
+
## [Color, Size, and Glyph Support](https://billtompkins.github.io/densitty/docs/terminal_support.html)
|
|
38
|
+
|
|
39
|
+
## [API](https://billtompkins.github.io/densitty/docs/api.html)
|
densitty-0.9.0/README.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<h1 align="center">densitty</h1>
|
|
2
|
+
<h2 align="center"> Terminal-based 2-D Histogram, Density Plots, and Heatmaps</h2>
|
|
3
|
+
|
|
4
|
+
Generate 2-D histograms (density plots, heat maps, eye diagrams) similar to [matplotlib's hist2d](https://matplotlib.org/stable/gallery/statistics/hist.html "hist2d"), but with output in the terminal, and no external dependencies.
|
|
5
|
+
|
|
6
|
+

|
|
7
|
+
|
|
8
|
+
## [Examples/Gallery](https://billtompkins.github.io/densitty/docs/examples.html)
|
|
9
|
+
|
|
10
|
+
## [Sub-modules / Usage Notes](https://billtompkins.github.io/densitty/docs/usage.html)
|
|
11
|
+
|
|
12
|
+
## [Color, Size, and Glyph Support](https://billtompkins.github.io/densitty/docs/terminal_support.html)
|
|
13
|
+
|
|
14
|
+
## [API](https://billtompkins.github.io/densitty/docs/api.html)
|
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
"""Axis-generation support."""
|
|
2
|
+
|
|
3
|
+
import dataclasses
|
|
4
|
+
from decimal import Decimal
|
|
5
|
+
import itertools
|
|
6
|
+
import math
|
|
7
|
+
from typing import Optional, Sequence
|
|
8
|
+
|
|
9
|
+
from . import lineart, util
|
|
10
|
+
from .util import FloatLike, ValueRange
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@dataclasses.dataclass
|
|
14
|
+
class BorderChars:
|
|
15
|
+
"""Characters to use for X/Y border"""
|
|
16
|
+
|
|
17
|
+
first: str
|
|
18
|
+
middle: str
|
|
19
|
+
last: str
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
y_border = {False: BorderChars(" ", " ", " "), True: BorderChars("╷", "│", "╵")}
|
|
23
|
+
x_border = {False: BorderChars(" ", " ", " "), True: BorderChars("╶", "─", "╴")}
|
|
24
|
+
|
|
25
|
+
###############################################
|
|
26
|
+
# Helper functions used by the Axis class below
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def pick_step_size(lower_bound) -> Decimal:
|
|
30
|
+
"""Try to pick a step size that gives nice round values for step positions."""
|
|
31
|
+
if lower_bound <= 0:
|
|
32
|
+
raise ValueError("pick_step_size called with 0 or negative value")
|
|
33
|
+
|
|
34
|
+
_, frac, exp = util.sfrexp10(lower_bound) # 0.1 <= frac < 1.0
|
|
35
|
+
|
|
36
|
+
# round up to an appropriate "round" value that starts with 1/2/5
|
|
37
|
+
if frac <= Decimal("0.2"):
|
|
38
|
+
out = Decimal((0, (2,), exp - 1))
|
|
39
|
+
elif frac <= Decimal("0.5"):
|
|
40
|
+
out = Decimal((0, (5,), exp - 1))
|
|
41
|
+
else:
|
|
42
|
+
out = Decimal((0, (1,), exp))
|
|
43
|
+
|
|
44
|
+
if out >= 10:
|
|
45
|
+
# this will be printed as 1E1 or such. Give it more significant figures so
|
|
46
|
+
# it is printed as an integer:
|
|
47
|
+
return out.quantize(1)
|
|
48
|
+
return out
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def add_x_label(line: list[str], label: str, ctr_pos: FloatLike):
|
|
52
|
+
"""Adds the label string to the output line, centered at specified position
|
|
53
|
+
The output line is a list of single-character strings, to make this kind of thing
|
|
54
|
+
straightforward"""
|
|
55
|
+
width = len(label)
|
|
56
|
+
start_col = int(max(float(ctr_pos) + 0.49 - width / 2, 0))
|
|
57
|
+
end_col = start_col + width
|
|
58
|
+
line[start_col:end_col] = list(label)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def add_x_tick(line: list[str], start_pos: float, left_margin: int, num_cols: int):
|
|
62
|
+
"""Adds a (possibly fractional) tick to the output line, centered at specified position"""
|
|
63
|
+
base_idx = int(start_pos)
|
|
64
|
+
fractional_pos = start_pos - base_idx
|
|
65
|
+
margined_idx = base_idx + left_margin
|
|
66
|
+
if 0.25 <= fractional_pos <= 0.75:
|
|
67
|
+
# add a tick in the center of the appropriate bin
|
|
68
|
+
line[margined_idx] = lineart.merge_chars("│", line[margined_idx])
|
|
69
|
+
return
|
|
70
|
+
if fractional_pos < 0.25:
|
|
71
|
+
left_idx = max(margined_idx - 1, 0)
|
|
72
|
+
else:
|
|
73
|
+
left_idx = margined_idx
|
|
74
|
+
|
|
75
|
+
if base_idx == 0:
|
|
76
|
+
line[left_idx] = lineart.merge_chars("│", line[left_idx])
|
|
77
|
+
else:
|
|
78
|
+
line[left_idx] = "╱"
|
|
79
|
+
|
|
80
|
+
if base_idx >= num_cols - 1:
|
|
81
|
+
line[left_idx + 1] = lineart.merge_chars("│", line[left_idx + 1])
|
|
82
|
+
else:
|
|
83
|
+
line[left_idx + 1] = "╲"
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def gen_tick_values(value_range, tick_step):
|
|
87
|
+
"""Produce tick values in the specified range. Basically numpy.arange"""
|
|
88
|
+
|
|
89
|
+
tick = math.ceil(value_range.min / tick_step) * tick_step
|
|
90
|
+
while tick <= value_range.max:
|
|
91
|
+
yield tick
|
|
92
|
+
tick += tick_step
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def filter_labels(labels: dict, values_to_print: Sequence):
|
|
96
|
+
"""Remove printed value with empty string (just a tick) for any
|
|
97
|
+
labels that aren't in values_to_print"""
|
|
98
|
+
|
|
99
|
+
return {k: v if k in values_to_print else "" for k, v in labels.items()}
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def calc_min_step(
|
|
103
|
+
value_range: ValueRange,
|
|
104
|
+
bin_width: FloatLike,
|
|
105
|
+
accomodate_values: bool,
|
|
106
|
+
tick_space: int,
|
|
107
|
+
fmt: str,
|
|
108
|
+
):
|
|
109
|
+
"""Calculate minimum step size for tick placement.
|
|
110
|
+
|
|
111
|
+
When accomodate_values is True, considers the width of printed labels.
|
|
112
|
+
Otherwise, only considers tick spacing requirements.
|
|
113
|
+
"""
|
|
114
|
+
if accomodate_values:
|
|
115
|
+
# find a representative printed label width to use for basic calculations
|
|
116
|
+
test_tick_step = pick_step_size((value_range.max - value_range.min) / 5)
|
|
117
|
+
test_values_printed = tuple(
|
|
118
|
+
fmt.format(value) for value in gen_tick_values(value_range, test_tick_step)
|
|
119
|
+
)
|
|
120
|
+
widths_in_bins = tuple(len(p) for p in test_values_printed)
|
|
121
|
+
# get the 3'd lowest width, or highest if there are less than 3 due to tick-step roundup:
|
|
122
|
+
example_width = sorted(widths_in_bins)[:3][-1]
|
|
123
|
+
min_printed_step = (example_width + 1) * bin_width
|
|
124
|
+
# If the printed labels are small (single-digit), the ticks themselves might be the
|
|
125
|
+
# limiting factor, especially if they are X-axis fractional ticks like "/\"
|
|
126
|
+
return max(min_printed_step, bin_width * (2 + tick_space * 2))
|
|
127
|
+
return bin_width * (2 + tick_space)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def gen_label_subsets(positions: tuple, tick_step: Decimal) -> list[tuple]:
|
|
131
|
+
"""Generate candidate label subsets based on tick step digit.
|
|
132
|
+
|
|
133
|
+
For tick steps starting with 1 or 2: generates every-5th subsets (5 variants).
|
|
134
|
+
For tick steps starting with 5: generates every-2nd subsets (2 variants).
|
|
135
|
+
"""
|
|
136
|
+
step_digit = tick_step.as_tuple().digits[0] # leading digit of tick step: 1, 2, or 5
|
|
137
|
+
|
|
138
|
+
# we want to pick different label subsets depending on whether we're advancing by
|
|
139
|
+
# 1eX, 2eX, or 5eX:
|
|
140
|
+
label_subsets = []
|
|
141
|
+
if step_digit in (1, 2):
|
|
142
|
+
# print on every fifth label, starting at 0..4
|
|
143
|
+
label_subsets += list(positions[start::5] for start in range(5))
|
|
144
|
+
elif step_digit in (1, 5):
|
|
145
|
+
# print on every second label, starting at 0 or 1
|
|
146
|
+
label_subsets += list(positions[start::2] for start in range(2))
|
|
147
|
+
return label_subsets
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def label_ends_only(labels, positions, tick_step, bin_width, accomodate_values):
|
|
151
|
+
"""See if printing just the labels for the first and last ticks will fit"""
|
|
152
|
+
|
|
153
|
+
if not accomodate_values:
|
|
154
|
+
# For Y axis / we don't care about printed widths
|
|
155
|
+
return labels
|
|
156
|
+
|
|
157
|
+
half_len_a = len(labels[positions[0]]) // 2
|
|
158
|
+
half_len_b = (len(labels[positions[-1]]) + 1) // 2
|
|
159
|
+
space_available = math.floor(tick_step / bin_width)
|
|
160
|
+
|
|
161
|
+
if half_len_a + half_len_b <= space_available:
|
|
162
|
+
# We can fit values on the first and last ticks
|
|
163
|
+
return filter_labels(labels, (positions[0], positions[-1]))
|
|
164
|
+
|
|
165
|
+
# Not enough space to print two values, so just print the first
|
|
166
|
+
return filter_labels(labels, positions[0:1])
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def find_fitting_subset(label_subsets, labels, tick_step, bin_width, accomodate_values):
|
|
170
|
+
"""Find roundest label subset that fits within space constraints"""
|
|
171
|
+
for label_subset in util.roundness_ordered(label_subsets):
|
|
172
|
+
if not accomodate_values:
|
|
173
|
+
return filter_labels(labels, label_subset)
|
|
174
|
+
# We're printing at most one value for every 2 ticks, so just make sure
|
|
175
|
+
# that the printed values will not run over the adjacent ticks' area
|
|
176
|
+
# Given the initial min_step logic, this will likely always be true
|
|
177
|
+
allowed_width = tick_step / bin_width * 2 - 2
|
|
178
|
+
max_printed_width = max(len(labels[k]) for k in label_subset)
|
|
179
|
+
if max_printed_width <= allowed_width:
|
|
180
|
+
return filter_labels(labels, label_subset)
|
|
181
|
+
return None
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def gen_full_labels(value_range: ValueRange, num_bins, accomodate_values, tick_space, fmt):
|
|
185
|
+
"""Generate positions for labels (plain ticks & ticks with value)"""
|
|
186
|
+
bin_width = (value_range.max - value_range.min) / num_bins
|
|
187
|
+
|
|
188
|
+
if bin_width <= 0:
|
|
189
|
+
# we don't have a sensible range for the axis values, so just have empty ticks
|
|
190
|
+
return {}
|
|
191
|
+
|
|
192
|
+
min_step = calc_min_step(value_range, bin_width, accomodate_values, tick_space, fmt)
|
|
193
|
+
cur_tick_step = pick_step_size(min_step)
|
|
194
|
+
|
|
195
|
+
while True:
|
|
196
|
+
labels = {
|
|
197
|
+
value: fmt.format(value) for value in gen_tick_values(value_range, cur_tick_step)
|
|
198
|
+
}
|
|
199
|
+
positions = tuple(labels.keys())
|
|
200
|
+
|
|
201
|
+
if len(labels) == 0:
|
|
202
|
+
# No suitable ticks/labels.
|
|
203
|
+
if accomodate_values:
|
|
204
|
+
# Printed value labels won't fit, try without them
|
|
205
|
+
return gen_full_labels(value_range, num_bins, False, tick_space, "")
|
|
206
|
+
# Nothing fits
|
|
207
|
+
return {}
|
|
208
|
+
if len(labels) == 1:
|
|
209
|
+
return labels
|
|
210
|
+
|
|
211
|
+
label_subsets = gen_label_subsets(positions, cur_tick_step)
|
|
212
|
+
|
|
213
|
+
# Check to see if all generated label subsets only have a single entry
|
|
214
|
+
if max(len(subset) for subset in label_subsets) == 1:
|
|
215
|
+
# Try to just label the ends:
|
|
216
|
+
return label_ends_only(labels, positions, cur_tick_step, bin_width, accomodate_values)
|
|
217
|
+
|
|
218
|
+
result = find_fitting_subset(
|
|
219
|
+
label_subsets, labels, cur_tick_step, bin_width, accomodate_values
|
|
220
|
+
)
|
|
221
|
+
if result is not None:
|
|
222
|
+
return result
|
|
223
|
+
|
|
224
|
+
cur_tick_step = pick_step_size(float(cur_tick_step) * 1.01)
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
def calc_edges(value_range, num_bins, values_are_edges):
|
|
228
|
+
"""Calculate the top/bottom or left/right values for each of 'num_bins' bins
|
|
229
|
+
|
|
230
|
+
Parameters
|
|
231
|
+
----------
|
|
232
|
+
value_range: util.ValueRange
|
|
233
|
+
Coordinate values for first/last bin
|
|
234
|
+
Can be center of bin, or outside edge (see values_are_edges)
|
|
235
|
+
num_bins: int
|
|
236
|
+
Number of bins/intervals to produce edges for
|
|
237
|
+
values_are_edges: bool
|
|
238
|
+
Indicates that value_range specifies outside edges rather than bin centers
|
|
239
|
+
"""
|
|
240
|
+
if values_are_edges or num_bins == 1:
|
|
241
|
+
bin_delta = (value_range.max - value_range.min) / num_bins
|
|
242
|
+
first_bin_min = value_range.min
|
|
243
|
+
else:
|
|
244
|
+
bin_delta = (value_range.max - value_range.min) / (num_bins - 1)
|
|
245
|
+
first_bin_min = value_range.min - (bin_delta / 2)
|
|
246
|
+
bin_edges = tuple(first_bin_min + i * bin_delta for i in range(num_bins + 1))
|
|
247
|
+
return itertools.pairwise(bin_edges)
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
###############################################
|
|
251
|
+
# The User-facing interface: the Axis class
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
@dataclasses.dataclass
|
|
255
|
+
class Axis:
|
|
256
|
+
"""Options for axis generation."""
|
|
257
|
+
|
|
258
|
+
value_range: ValueRange # can also specify as a tuple of (min, max)
|
|
259
|
+
labels: Optional[dict[float, str]] = None # map axis value to label (plus tick) at that value
|
|
260
|
+
label_fmt: str = "{}" # format for generated labels
|
|
261
|
+
border_line: bool = False # embed ticks in a horizontal X-axis or vertical Y-axis line
|
|
262
|
+
values_are_edges: bool = False # N+1 values, indicating boundaries between pixels, not centers
|
|
263
|
+
fractional_tick_pos: bool = False # Use "▔", "▁", or "╱╲" for non-centered ticks
|
|
264
|
+
|
|
265
|
+
def __init__(
|
|
266
|
+
self,
|
|
267
|
+
value_range: ValueRange | tuple[FloatLike, FloatLike],
|
|
268
|
+
labels: Optional[dict[float, str]] = None,
|
|
269
|
+
label_fmt: str = "{}",
|
|
270
|
+
border_line: bool = False,
|
|
271
|
+
values_are_edges: bool = False,
|
|
272
|
+
fractional_tick_pos: bool = False,
|
|
273
|
+
# pylint: disable=too-many-arguments,too-many-positional-arguments
|
|
274
|
+
):
|
|
275
|
+
# Sanitize value_range: allow user to provide it as a tuple of FloatLike (without
|
|
276
|
+
# needing to import ValueRange), and convert to ValueRange(Decimal, Decimal)
|
|
277
|
+
self.value_range = ValueRange(
|
|
278
|
+
Decimal(float(value_range[0])), Decimal(float(value_range[1]))
|
|
279
|
+
)
|
|
280
|
+
self.labels = labels
|
|
281
|
+
self.label_fmt = label_fmt
|
|
282
|
+
self.border_line = border_line
|
|
283
|
+
self.values_are_edges = values_are_edges
|
|
284
|
+
self.fractional_tick_pos = fractional_tick_pos
|
|
285
|
+
|
|
286
|
+
def _unjustified_y_axis(self, num_rows: int):
|
|
287
|
+
"""Returns the Y axis string for each line of the plot"""
|
|
288
|
+
if self.labels is None:
|
|
289
|
+
labels = gen_full_labels(
|
|
290
|
+
self.value_range,
|
|
291
|
+
num_rows,
|
|
292
|
+
False,
|
|
293
|
+
0,
|
|
294
|
+
self.label_fmt,
|
|
295
|
+
)
|
|
296
|
+
else:
|
|
297
|
+
labels = self.labels
|
|
298
|
+
|
|
299
|
+
label_values = sorted(labels.keys())
|
|
300
|
+
bins = calc_edges(self.value_range, num_rows, self.values_are_edges)
|
|
301
|
+
|
|
302
|
+
use_combining = self.border_line and self.fractional_tick_pos
|
|
303
|
+
for row_min, row_max in bins:
|
|
304
|
+
if label_values and row_min <= label_values[0] <= row_max:
|
|
305
|
+
label_str = labels[label_values[0]]
|
|
306
|
+
|
|
307
|
+
offset_frac = (label_values[0] - row_min) / (row_max - row_min)
|
|
308
|
+
if offset_frac < 0.25 and self.fractional_tick_pos:
|
|
309
|
+
tick_char = "▔"
|
|
310
|
+
elif offset_frac > 0.75 and self.fractional_tick_pos:
|
|
311
|
+
tick_char = "▁"
|
|
312
|
+
else:
|
|
313
|
+
tick_char = "─"
|
|
314
|
+
label_str += lineart.merge_chars(
|
|
315
|
+
tick_char,
|
|
316
|
+
y_border[self.border_line].middle,
|
|
317
|
+
use_combining_unicode=use_combining,
|
|
318
|
+
)
|
|
319
|
+
yield label_str
|
|
320
|
+
label_values = label_values[1:]
|
|
321
|
+
else:
|
|
322
|
+
yield y_border[self.border_line].middle
|
|
323
|
+
|
|
324
|
+
def render_as_y(self, num_rows: int, pad_top: bool, pad_bot: bool, flip: bool):
|
|
325
|
+
"""Create a Y axis as a list of strings for the left margin of a plot
|
|
326
|
+
|
|
327
|
+
Parameters
|
|
328
|
+
----------
|
|
329
|
+
num_rows: int
|
|
330
|
+
Number of data rows
|
|
331
|
+
pad_top: bool
|
|
332
|
+
Emit a line for an X axis line/row at the top
|
|
333
|
+
pad_bot: bool
|
|
334
|
+
Emit a line for an X axis line/row at the bottom
|
|
335
|
+
flip: bool
|
|
336
|
+
Put the minimum Y on the last line rather than the first
|
|
337
|
+
"""
|
|
338
|
+
unpadded_labels = list(self._unjustified_y_axis(num_rows))
|
|
339
|
+
if flip:
|
|
340
|
+
unpadded_labels = [
|
|
341
|
+
s.translate(lineart.flip_vertical) for s in reversed(unpadded_labels)
|
|
342
|
+
]
|
|
343
|
+
|
|
344
|
+
if pad_top:
|
|
345
|
+
unpadded_labels = [y_border[self.border_line].first] + unpadded_labels
|
|
346
|
+
if pad_bot:
|
|
347
|
+
unpadded_labels = unpadded_labels + [y_border[self.border_line].last]
|
|
348
|
+
|
|
349
|
+
lengths = [lineart.display_len(label_str) for label_str in unpadded_labels]
|
|
350
|
+
max_width = max(lengths)
|
|
351
|
+
pad_lengths = [max_width - length for length in lengths]
|
|
352
|
+
padded_labels = [
|
|
353
|
+
" " * pad_length + label_str
|
|
354
|
+
for (label_str, pad_length) in zip(unpadded_labels, pad_lengths)
|
|
355
|
+
]
|
|
356
|
+
return padded_labels
|
|
357
|
+
|
|
358
|
+
def render_as_x(self, num_cols: int, left_margin: int):
|
|
359
|
+
"""Generate X tick line and X label line.
|
|
360
|
+
|
|
361
|
+
Parameters
|
|
362
|
+
----------
|
|
363
|
+
num_cols: int
|
|
364
|
+
Number of data columns
|
|
365
|
+
left_margin: int
|
|
366
|
+
chars to the left of leftmost data col. May have Labels/border-line.
|
|
367
|
+
"""
|
|
368
|
+
if self.labels is None:
|
|
369
|
+
tick_space = 1 if self.fractional_tick_pos else 0
|
|
370
|
+
labels = gen_full_labels(self.value_range, num_cols, True, tick_space, self.label_fmt)
|
|
371
|
+
else:
|
|
372
|
+
labels = self.labels
|
|
373
|
+
|
|
374
|
+
label_values = sorted(labels.keys())
|
|
375
|
+
|
|
376
|
+
bins = calc_edges(self.value_range, num_cols, self.values_are_edges)
|
|
377
|
+
|
|
378
|
+
tick_line = list(
|
|
379
|
+
" " * (left_margin - 1)
|
|
380
|
+
+ x_border[self.border_line].first
|
|
381
|
+
+ x_border[self.border_line].middle * num_cols
|
|
382
|
+
+ x_border[self.border_line].last
|
|
383
|
+
)
|
|
384
|
+
|
|
385
|
+
label_line = [" "] * len(tick_line) # labels under the ticks
|
|
386
|
+
|
|
387
|
+
for col_idx, (col_min, col_max) in enumerate(bins):
|
|
388
|
+
# use Decimal.next_plus to accomodate rounding error/truncation
|
|
389
|
+
if label_values and col_min <= label_values[0] <= col_max.next_plus():
|
|
390
|
+
if self.fractional_tick_pos:
|
|
391
|
+
offset_frac = (label_values[0] - col_min) / (col_max - col_min)
|
|
392
|
+
else:
|
|
393
|
+
offset_frac = 0.5 # not doing fractional tick positioning == center the tick
|
|
394
|
+
|
|
395
|
+
add_x_tick(tick_line, col_idx + offset_frac, left_margin, num_cols)
|
|
396
|
+
add_x_label(
|
|
397
|
+
label_line, labels[label_values[0]], col_idx + left_margin + offset_frac
|
|
398
|
+
)
|
|
399
|
+
|
|
400
|
+
label_values = label_values[1:] # pop that first label since we added it
|
|
401
|
+
|
|
402
|
+
return "".join(tick_line), "".join(label_line)
|