diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..c547c8a --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,23 @@ +name: CI + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + workflow_dispatch: + +jobs: + verify: + runs-on: ubuntu-latest + + permissions: + contents: read + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Install requirements + run: pip install -r requirements.txt + - name: Verify test data + run: ./verify_data.py \ No newline at end of file diff --git a/dist/dist.toml b/dist/dist.toml index e69de29..0678c8b 100644 --- a/dist/dist.toml +++ b/dist/dist.toml @@ -0,0 +1,422 @@ +mapping_intervals = [ + [0, 1], + [-2, 2], + [-1000, -900], + [1000, 2000], + [-9999, 9999], +] + +[uniform] +test_cases = [ + { n = 0, a = -1, b = 1, expected = [] }, + { n = 1, a = -1, b = 1, expected = [0] }, + { n = 2, a = -1, b = 1, expected = [-1, 1] }, + { n = 3, a = -1, b = 1, expected = [-1, 0, 1] }, + { n = 4, a = -1, b = 1, expected = [-1, -0.33333333333333333, 0.33333333333333333, 1] }, + { n = 5, a = -1, b = 1, expected = [-1, -0.5, 0, 0.5, 1] }, + { n = 6, a = -1, b = 1, expected = [-1, -0.6, -0.2, 0.2, 0.6, 1] }, +] + +[chebyshev] +test_cases = [ + { n = 0, a = -1, b = 1, expected = [] }, + { n = 1, a = -1, b = 1, expected = [0] }, + { n = 2, a = -1, b = 1, expected = [-0.70710678118654752, 0.70710678118654752] }, + { n = 3, a = -1, b = 1, expected = [-0.86602540378443865, 0, 0.86602540378443865] }, + { n = 4, a = -1, b = 1, expected = [-0.92387953251128676, -0.38268343236508977, 0.38268343236508977, 0.92387953251128676] }, + { n = 5, a = -1, b = 1, expected = [-0.95105651629515357, -0.58778525229247313, 0, 0.58778525229247313, 0.95105651629515357] }, + { n = 6, a = -1, b = 1, expected = [-0.96592582628906829, -0.70710678118654752, -0.25881904510252076, 0.25881904510252076, 0.70710678118654752, 0.96592582628906829] }, +] + +[chebyshev_stretched] +test_cases = [ + { n = 0, a = -1, b = 1, expected = [] }, + { n = 1, a = -1, b = 1, expected = [0] }, + { n = 2, a = -1, b = 1, expected = [-1, 1] }, + { n = 3, a = -1, b = 1, expected = [-1, 0, 1] }, + { n = 4, a = -1, b = 1, expected = [-1, -0.41421356237309505, 0.41421356237309505, 1] }, + { n = 5, a = -1, b = 1, expected = [-1, -0.61803398874989485, 0, 0.61803398874989485, 1] }, + { n = 6, a = -1, b = 1, expected = [-1, -0.73205080756887729, -0.26794919243112271, 0.26794919243112271, 0.73205080756887729, 1] }, +] + +[chebyshev_ellipse] +test_cases = [ + { n = 0, a = -1, b = 1, ratio=0.1, expected = [] }, + { n = 0, a = -1, b = 1, ratio=0.25, expected = [] }, + { n = 0, a = -1, b = 1, ratio=0.5, expected = [] }, + { n = 0, a = -1, b = 1, ratio=1, expected = [] }, + { n = 0, a = -1, b = 1, ratio=2, expected = [] }, + { n = 0, a = -1, b = 1, ratio=4, expected = [] }, + { n = 0, a = -1, b = 1, ratio=10, expected = [] }, + { n = 1, a = -1, b = 1, ratio=0.1, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=0.25, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=0.5, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=1, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=2, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=4, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=10, expected = [0] }, + { n = 2, a = -1, b = 1, ratio=0.1, expected = [-0.099503719020998914, 0.099503719020998914] }, + { n = 2, a = -1, b = 1, ratio=0.25, expected = [-0.24253562503633297, 0.24253562503633297] }, + { n = 2, a = -1, b = 1, ratio=0.5, expected = [-0.44721359549995794, 0.44721359549995794] }, + { n = 2, a = -1, b = 1, ratio=1, expected = [-0.70710678118654752, 0.70710678118654752] }, + { n = 2, a = -1, b = 1, ratio=2, expected = [-0.89442719099991588, 0.89442719099991588] }, + { n = 2, a = -1, b = 1, ratio=4, expected = [-0.97014250014533189, 0.97014250014533189] }, + { n = 2, a = -1, b = 1, ratio=10, expected = [-0.99503719020998914, 0.99503719020998914] }, + { n = 3, a = -1, b = 1, ratio=0.1, expected = [-0.17066403719657229, 0, 0.17066403719657229] }, + { n = 3, a = -1, b = 1, ratio=0.25, expected = [-0.39735970711951314, 0, 0.39735970711951314] }, + { n = 3, a = -1, b = 1, ratio=0.5, expected = [-0.65465367070797714, 0, 0.65465367070797714] }, + { n = 3, a = -1, b = 1, ratio=1, expected = [-0.86602540378443865, 0, 0.86602540378443865] }, + { n = 3, a = -1, b = 1, ratio=2, expected = [-0.9607689228305228, 0, 0.9607689228305228] }, + { n = 3, a = -1, b = 1, ratio=4, expected = [-0.98974331861078702, 0, 0.98974331861078702] }, + { n = 3, a = -1, b = 1, ratio=10, expected = [-0.99833748845958268, 0, 0.99833748845958268] }, + { n = 4, a = -1, b = 1, ratio=0.1, expected = [-0.23467915435260521, -0.041385867991006554, 0.041385867991006554, 0.23467915435260521] }, + { n = 4, a = -1, b = 1, ratio=0.25, expected = [-0.51673093692781504, -0.10300259910443524, 0.10300259910443524, 0.51673093692781504] }, + { n = 4, a = -1, b = 1, ratio=0.5, expected = [-0.77007615237912863, -0.20280301033360352, 0.20280301033360352, 0.77007615237912863] }, + { n = 4, a = -1, b = 1, ratio=1, expected = [-0.92387953251128676, -0.38268343236508977, 0.38268343236508977, 0.92387953251128676] }, + { n = 4, a = -1, b = 1, ratio=2, expected = [-0.97921955607495314, -0.63795197275105049, 0.63795197275105049, 0.97921955607495314] }, + { n = 4, a = -1, b = 1, ratio=4, expected = [-0.99468108687042552, -0.85614784869302944, 0.85614784869302944, 0.99468108687042552] }, + { n = 4, a = -1, b = 1, ratio=10, expected = [-0.99914323794470579, -0.97207288539098039, 0.97207288539098039, 0.99914323794470579] }, + { n = 5, a = -1, b = 1, ratio=0.1, expected = [-0.29415224378902954, -0.072463250803084071, 0, 0.072463250803084071, 0.29415224378902954] }, + { n = 5, a = -1, b = 1, ratio=0.25, expected = [-0.60980541906506879, -0.1787115719203943, 0, 0.1787115719203943, 0.60980541906506879] }, + { n = 5, a = -1, b = 1, ratio=0.5, expected = [-0.83850514744696373, -0.34143996376008271, 0, 0.34143996376008271, 0.83850514744696373] }, + { n = 5, a = -1, b = 1, ratio=1, expected = [-0.95105651629515357, -0.58778525229247313, 0, 0.58778525229247313, 0.95105651629515357] }, + { n = 5, a = -1, b = 1, ratio=2, expected = [-0.98705900842639017, -0.82377610785199549, 0, 0.82377610785199549, 0.98705900842639017] }, + { n = 5, a = -1, b = 1, ratio=4, expected = [-0.99671708704974453, -0.9455861246693765, 0, 0.9455861246693765, 0.99671708704974453] }, + { n = 5, a = -1, b = 1, ratio=10, expected = [-0.99947255354830325, -0.99066035608022525, 0, 0.99066035608022525, 0.99947255354830325] }, + { n = 6, a = -1, b = 1, ratio=0.1, expected = [-0.34964870450548993, -0.099503719020998914, -0.02678530547634972, 0.02678530547634972, 0.099503719020998914, 0.34964870450548993] }, + { n = 6, a = -1, b = 1, ratio=0.25, expected = [-0.6821929475149257, -0.24253562503633297, -0.066837506052871828, 0.066837506052871828, 0.24253562503633297, 0.6821929475149257] }, + { n = 6, a = -1, b = 1, ratio=0.5, expected = [-0.88141241665537846, -0.44721359549995794, -0.13278817609610806, 0.13278817609610806, 0.44721359549995794, 0.88141241665537846] }, + { n = 6, a = -1, b = 1, ratio=1, expected = [-0.96592582628906829, -0.70710678118654752, -0.25881904510252076, 0.25881904510252076, 0.70710678118654752, 0.96592582628906829] }, + { n = 6, a = -1, b = 1, ratio=2, expected = [-0.99114443967015675, -0.89442719099991588, -0.47234749048314581, 0.47234749048314581, 0.89442719099991588, 0.99114443967015675] }, + { n = 6, a = -1, b = 1, ratio=4, expected = [-0.99776387376204011, -0.97014250014533189, -0.73117219747532648, 0.73117219747532648, 0.97014250014533189, 0.99776387376204011] }, + { n = 6, a = -1, b = 1, ratio=10, expected = [-0.99964120933990043, -0.99503719020998914, -0.93688088006834283, 0.93688088006834283, 0.99503719020998914, 0.99964120933990043] }, +] + +[chebyshev_ellipse_stretched] +test_cases = [ + { n = 0, a = -1, b = 1, ratio=0.1, expected = [] }, + { n = 0, a = -1, b = 1, ratio=0.25, expected = [] }, + { n = 0, a = -1, b = 1, ratio=0.5, expected = [] }, + { n = 0, a = -1, b = 1, ratio=1, expected = [] }, + { n = 0, a = -1, b = 1, ratio=2, expected = [] }, + { n = 0, a = -1, b = 1, ratio=4, expected = [] }, + { n = 0, a = -1, b = 1, ratio=10, expected = [] }, + { n = 1, a = -1, b = 1, ratio=0.1, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=0.25, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=0.5, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=1, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=2, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=4, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=10, expected = [0] }, + { n = 2, a = -1, b = 1, ratio=0.1, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, ratio=0.25, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, ratio=0.5, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, ratio=1, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, ratio=2, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, ratio=4, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, ratio=10, expected = [-1, 1] }, + { n = 3, a = -1, b = 1, ratio=0.1, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, ratio=0.25, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, ratio=0.5, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, ratio=1, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, ratio=2, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, ratio=4, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, ratio=10, expected = [-1, 0, 1] }, + { n = 4, a = -1, b = 1, ratio=0.1, expected = [-1, -0.17635084848151586, 0.17635084848151586, 1] }, + { n = 4, a = -1, b = 1, ratio=0.25, expected = [-1, -0.19933507313657173, 0.19933507313657173, 1] }, + { n = 4, a = -1, b = 1, ratio=0.5, expected = [-1, -0.26335448735433414, 0.26335448735433414, 1] }, + { n = 4, a = -1, b = 1, ratio=1, expected = [-1, -0.41421356237309505, 0.41421356237309505, 1] }, + { n = 4, a = -1, b = 1, ratio=2, expected = [-1, -0.65149022892085628, 0.65149022892085628, 1] }, + { n = 4, a = -1, b = 1, ratio=4, expected = [-1, -0.86072597538446769, 0.86072597538446769, 1] }, + { n = 4, a = -1, b = 1, ratio=10, expected = [-1, -0.97290643470758942, 0.97290643470758942, 1] }, + { n = 5, a = -1, b = 1, ratio=0.1, expected = [-1, -0.24634607531688868, 0, 0.24634607531688868, 1] }, + { n = 5, a = -1, b = 1, ratio=0.25, expected = [-1, -0.29306327286233091, 0, 0.29306327286233091, 1] }, + { n = 5, a = -1, b = 1, ratio=0.5, expected = [-1, -0.40720079632150276, 0, 0.40720079632150276, 1] }, + { n = 5, a = -1, b = 1, ratio=1, expected = [-1, -0.61803398874989485, 0, 0.61803398874989485, 1] }, + { n = 5, a = -1, b = 1, ratio=2, expected = [-1, -0.83457635340899532, 0, 0.83457635340899532, 1] }, + { n = 5, a = -1, b = 1, ratio=4, expected = [-1, -0.94870062624117914, 0, 0.94870062624117914, 1] }, + { n = 5, a = -1, b = 1, ratio=10, expected = [-1, -0.99118315211679085, 0, 0.99118315211679085, 1] }, + { n = 6, a = -1, b = 1, ratio=0.1, expected = [-1, -0.28458197539077848, -0.076606334103918168, 0.076606334103918168, 0.28458197539077848, 1] }, + { n = 6, a = -1, b = 1, ratio=0.25, expected = [-1, -0.35552350096821623, -0.097974489909849866, 0.097974489909849866, 0.35552350096821623, 1] }, + { n = 6, a = -1, b = 1, ratio=0.5, expected = [-1, -0.507382908442522, -0.15065385237025385, 0.15065385237025385, 0.507382908442522, 1] }, + { n = 6, a = -1, b = 1, ratio=1, expected = [-1, -0.73205080756887729, -0.26794919243112271, 0.26794919243112271, 0.73205080756887729, 1] }, + { n = 6, a = -1, b = 1, ratio=2, expected = [-1, -0.90241861347431114, -0.47656776507805308, 0.47656776507805308, 0.90241861347431114, 1] }, + { n = 6, a = -1, b = 1, ratio=4, expected = [-1, -0.97231672308142144, -0.73281085505577853, 0.73281085505577853, 0.97231672308142144, 1] }, + { n = 6, a = -1, b = 1, ratio=10, expected = [-1, -0.99539432839813447, -0.93721714482639173, 0.93721714482639173, 0.99539432839813447, 1] }, +] + +[circle_proj] +test_cases = [ + { n = 0, a = -1, b = 1, expected = [] }, + { n = 1, a = -1, b = 1, expected = [0] }, + { n = 2, a = -1, b = 1, expected = [-1, 1] }, + { n = 3, a = -1, b = 1, expected = [-1, 0, 1] }, + { n = 4, a = -1, b = 1, expected = [-1, -0.5, 0.5, 1] }, + { n = 5, a = -1, b = 1, expected = [-1, -0.70710678118654752, 0, 0.70710678118654752, 1] }, + { n = 6, a = -1, b = 1, expected = [-1, -0.80901699437494742, -0.30901699437494742, 0.30901699437494742, 0.80901699437494742, 1] }, +] + +[ellipse_proj] +test_cases = [ + { n = 0, a = -1, b = 1, ratio=0.1, expected = [] }, + { n = 0, a = -1, b = 1, ratio=0.25, expected = [] }, + { n = 0, a = -1, b = 1, ratio=0.5, expected = [] }, + { n = 0, a = -1, b = 1, ratio=1, expected = [] }, + { n = 0, a = -1, b = 1, ratio=2, expected = [] }, + { n = 0, a = -1, b = 1, ratio=4, expected = [] }, + { n = 0, a = -1, b = 1, ratio=10, expected = [] }, + { n = 1, a = -1, b = 1, ratio=0.1, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=0.25, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=0.5, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=1, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=2, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=4, expected = [0] }, + { n = 1, a = -1, b = 1, ratio=10, expected = [0] }, + { n = 2, a = -1, b = 1, ratio=0.1, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, ratio=0.25, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, ratio=0.5, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, ratio=1, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, ratio=2, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, ratio=4, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, ratio=10, expected = [-1, 1] }, + { n = 3, a = -1, b = 1, ratio=0.1, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, ratio=0.25, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, ratio=0.5, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, ratio=1, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, ratio=2, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, ratio=4, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, ratio=10, expected = [-1, 0, 1] }, + { n = 4, a = -1, b = 1, ratio=0.1, expected = [-1, -0.057639041770423496, 0.057639041770423496, 1] }, + { n = 4, a = -1, b = 1, ratio=0.25, expected = [-1, -0.14285714285714286, 0.14285714285714286, 1] }, + { n = 4, a = -1, b = 1, ratio=0.5, expected = [-1, -0.27735009811261456, 0.27735009811261456, 1] }, + { n = 4, a = -1, b = 1, ratio=1, expected = [-1, -0.5, 0.5, 1] }, + { n = 4, a = -1, b = 1, ratio=2, expected = [-1, -0.75592894601845445, 0.75592894601845445, 1] }, + { n = 4, a = -1, b = 1, ratio=4, expected = [-1, -0.91766293548224706, 0.91766293548224706, 1] }, + { n = 4, a = -1, b = 1, ratio=10, expected = [-1, -0.98532927816429315, 0.98532927816429315, 1] }, + { n = 5, a = -1, b = 1, ratio=0.1, expected = [-1, -0.099503719020998914, 0, 0.099503719020998914, 1] }, + { n = 5, a = -1, b = 1, ratio=0.25, expected = [-1, -0.24253562503633297, 0, 0.24253562503633297, 1] }, + { n = 5, a = -1, b = 1, ratio=0.5, expected = [-1, -0.44721359549995794, 0, 0.44721359549995794, 1] }, + { n = 5, a = -1, b = 1, ratio=1, expected = [-1, -0.70710678118654752, 0, 0.70710678118654752, 1] }, + { n = 5, a = -1, b = 1, ratio=2, expected = [-1, -0.89442719099991588, 0, 0.89442719099991588, 1] }, + { n = 5, a = -1, b = 1, ratio=4, expected = [-1, -0.97014250014533189, 0, 0.97014250014533189, 1] }, + { n = 5, a = -1, b = 1, ratio=10, expected = [-1, -0.99503719020998914, 0, 0.99503719020998914, 1] }, + { n = 6, a = -1, b = 1, ratio=0.1, expected = [-1, -0.13635270034363571, -0.032474831849204189, 0.032474831849204189, 0.13635270034363571, 1] }, + { n = 6, a = -1, b = 1, ratio=0.25, expected = [-1, -0.32537191156083274, -0.080963253288587561, 0.080963253288587561, 0.32537191156083274, 1] }, + { n = 6, a = -1, b = 1, ratio=0.5, expected = [-1, -0.56691527068179906, -0.16035745659092821, 0.16035745659092821, 0.56691527068179906, 1] }, + { n = 6, a = -1, b = 1, ratio=1, expected = [-1, -0.80901699437494742, -0.30901699437494742, 0.30901699437494742, 0.80901699437494742, 1] }, + { n = 6, a = -1, b = 1, ratio=2, expected = [-1, -0.93990358609142108, -0.54489367559639157, 0.54489367559639157, 0.93990358609142108, 1] }, + { n = 6, a = -1, b = 1, ratio=4, expected = [-1, -0.98390150628085824, -0.79255116609520918, 0.79255116609520918, 0.98390150628085824, 1] }, + { n = 6, a = -1, b = 1, ratio=10, expected = [-1, -0.99737108303933162, -0.95575857698159284, 0.95575857698159284, 0.99737108303933162, 1] }, +] + +[sigmoid] +test_cases = [ + { n = 0, a = -1, b = 1, steepness=0.1, expected = [] }, + { n = 0, a = -1, b = 1, steepness=0.25, expected = [] }, + { n = 0, a = -1, b = 1, steepness=0.5, expected = [] }, + { n = 0, a = -1, b = 1, steepness=1, expected = [] }, + { n = 0, a = -1, b = 1, steepness=2, expected = [] }, + { n = 0, a = -1, b = 1, steepness=4, expected = [] }, + { n = 0, a = -1, b = 1, steepness=10, expected = [] }, + { n = 1, a = -1, b = 1, steepness=0.1, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=0.25, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=0.5, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=1, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=2, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=4, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=10, expected = [0] }, + { n = 2, a = -1, b = 1, steepness=0.1, expected = [-0.049958374957879972, 0.049958374957879972] }, + { n = 2, a = -1, b = 1, steepness=0.25, expected = [-0.12435300177159621, 0.12435300177159621] }, + { n = 2, a = -1, b = 1, steepness=0.5, expected = [-0.24491866240370913, 0.24491866240370913] }, + { n = 2, a = -1, b = 1, steepness=1, expected = [-0.46211715726000976, 0.46211715726000976] }, + { n = 2, a = -1, b = 1, steepness=2, expected = [-0.76159415595576489, 0.76159415595576489] }, + { n = 2, a = -1, b = 1, steepness=4, expected = [-0.96402758007581688, 0.96402758007581688] }, + { n = 2, a = -1, b = 1, steepness=10, expected = [-0.99990920426259513, 0.99990920426259513] }, + { n = 3, a = -1, b = 1, steepness=0.1, expected = [-0.049958374957879972, 0, 0.049958374957879972] }, + { n = 3, a = -1, b = 1, steepness=0.25, expected = [-0.12435300177159621, 0, 0.12435300177159621] }, + { n = 3, a = -1, b = 1, steepness=0.5, expected = [-0.24491866240370913, 0, 0.24491866240370913] }, + { n = 3, a = -1, b = 1, steepness=1, expected = [-0.46211715726000976, 0, 0.46211715726000976] }, + { n = 3, a = -1, b = 1, steepness=2, expected = [-0.76159415595576489, 0, 0.76159415595576489] }, + { n = 3, a = -1, b = 1, steepness=4, expected = [-0.96402758007581688, 0, 0.96402758007581688] }, + { n = 3, a = -1, b = 1, steepness=10, expected = [-0.99990920426259513, 0, 0.99990920426259513] }, + { n = 4, a = -1, b = 1, steepness=0.1, expected = [-0.049958374957879972, -0.016665123628238611, 0.016665123628238611, 0.049958374957879972] }, + { n = 4, a = -1, b = 1, steepness=0.25, expected = [-0.12435300177159621, -0.04164257074548595, 0.04164257074548595, 0.12435300177159621] }, + { n = 4, a = -1, b = 1, steepness=0.5, expected = [-0.24491866240370913, -0.083140966433599757, 0.083140966433599757, 0.24491866240370913] }, + { n = 4, a = -1, b = 1, steepness=1, expected = [-0.46211715726000976, -0.16514041292462935, 0.16514041292462935, 0.46211715726000976] }, + { n = 4, a = -1, b = 1, steepness=2, expected = [-0.76159415595576489, -0.32151273753163434, 0.32151273753163434, 0.76159415595576489] }, + { n = 4, a = -1, b = 1, steepness=4, expected = [-0.96402758007581688, -0.58278294534791012, 0.58278294534791012, 0.96402758007581688] }, + { n = 4, a = -1, b = 1, steepness=10, expected = [-0.99990920426259513, -0.93110960866757765, 0.93110960866757765, 0.99990920426259513] }, + { n = 5, a = -1, b = 1, steepness=0.1, expected = [-0.049958374957879972, -0.024994792968420687, 0, 0.024994792968420687, 0.049958374957879972] }, + { n = 5, a = -1, b = 1, steepness=0.25, expected = [-0.12435300177159621, -0.062418746747512514, 0, 0.062418746747512514, 0.12435300177159621] }, + { n = 5, a = -1, b = 1, steepness=0.5, expected = [-0.24491866240370913, -0.12435300177159621, 0, 0.12435300177159621, 0.24491866240370913] }, + { n = 5, a = -1, b = 1, steepness=1, expected = [-0.46211715726000976, -0.24491866240370913, 0, 0.24491866240370913, 0.46211715726000976] }, + { n = 5, a = -1, b = 1, steepness=2, expected = [-0.76159415595576489, -0.46211715726000976, 0, 0.46211715726000976, 0.76159415595576489] }, + { n = 5, a = -1, b = 1, steepness=4, expected = [-0.96402758007581688, -0.76159415595576489, 0, 0.76159415595576489, 0.96402758007581688] }, + { n = 5, a = -1, b = 1, steepness=10, expected = [-0.99990920426259513, -0.98661429815143029, 0, 0.98661429815143029, 0.99990920426259513] }, + { n = 6, a = -1, b = 1, steepness=0.1, expected = [-0.049958374957879972, -0.029991003238820145, -0.0099996666799994603, 0.0099996666799994603, 0.029991003238820145, 0.049958374957879972] }, + { n = 6, a = -1, b = 1, steepness=0.25, expected = [-0.12435300177159621, -0.074859690687499099, -0.024994792968420687, 0.024994792968420687, 0.074859690687499099, 0.12435300177159621] }, + { n = 6, a = -1, b = 1, steepness=0.5, expected = [-0.24491866240370913, -0.14888503362331797, -0.049958374957879972, 0.049958374957879972, 0.14888503362331797, 0.24491866240370913] }, + { n = 6, a = -1, b = 1, steepness=1, expected = [-0.46211715726000976, -0.29131261245159091, -0.099667994624955817, 0.099667994624955817, 0.29131261245159091, 0.46211715726000976] }, + { n = 6, a = -1, b = 1, steepness=2, expected = [-0.76159415595576489, -0.53704956699803529, -0.197375320224904, 0.197375320224904, 0.53704956699803529, 0.76159415595576489] }, + { n = 6, a = -1, b = 1, steepness=4, expected = [-0.96402758007581688, -0.83365460701215526, -0.37994896225522489, 0.37994896225522489, 0.83365460701215526, 0.96402758007581688] }, + { n = 6, a = -1, b = 1, steepness=10, expected = [-0.99990920426259513, -0.99505475368673045, -0.76159415595576489, 0.76159415595576489, 0.99505475368673045, 0.99990920426259513] }, +] + +[sigmoid_stretched] +test_cases = [ + { n = 0, a = -1, b = 1, steepness=0.1, expected = [] }, + { n = 0, a = -1, b = 1, steepness=0.25, expected = [] }, + { n = 0, a = -1, b = 1, steepness=0.5, expected = [] }, + { n = 0, a = -1, b = 1, steepness=1, expected = [] }, + { n = 0, a = -1, b = 1, steepness=2, expected = [] }, + { n = 0, a = -1, b = 1, steepness=4, expected = [] }, + { n = 0, a = -1, b = 1, steepness=10, expected = [] }, + { n = 1, a = -1, b = 1, steepness=0.1, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=0.25, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=0.5, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=1, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=2, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=4, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=10, expected = [0] }, + { n = 2, a = -1, b = 1, steepness=0.1, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, steepness=0.25, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, steepness=0.5, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, steepness=1, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, steepness=2, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, steepness=4, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, steepness=10, expected = [-1, 1] }, + { n = 3, a = -1, b = 1, steepness=0.1, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, steepness=0.25, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, steepness=0.5, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, steepness=1, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, steepness=2, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, steepness=4, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, steepness=10, expected = [-1, 0, 1] }, + { n = 4, a = -1, b = 1, steepness=0.1, expected = [-1, -0.33358017834425194, 0.33358017834425194, 1] }, + { n = 4, a = -1, b = 1, steepness=0.25, expected = [-1, -0.33487386836043099, 0.33487386836043099, 1] }, + { n = 4, a = -1, b = 1, steepness=0.5, expected = [-1, -0.33946358198116896, 0.33946358198116896, 1] }, + { n = 4, a = -1, b = 1, steepness=1, expected = [-1, -0.35735616029446244, 0.35735616029446244, 1] }, + { n = 4, a = -1, b = 1, steepness=2, expected = [-1, -0.42215756911652107, 0.42215756911652107, 1] }, + { n = 4, a = -1, b = 1, steepness=4, expected = [-1, -0.60452932819834531, 0.60452932819834531, 1] }, + { n = 4, a = -1, b = 1, steepness=10, expected = [-1, -0.93119415712774117, 0.93119415712774117, 1] }, + { n = 5, a = -1, b = 1, steepness=0.1, expected = [-1, -0.50031236983776711, 0, 0.50031236983776711, 1] }, + { n = 5, a = -1, b = 1, steepness=0.25, expected = [-1, -0.50194804997276505, 0, 0.50194804997276505, 1] }, + { n = 5, a = -1, b = 1, steepness=0.5, expected = [-1, -0.5077318345248033, 0, 0.5077318345248033, 1] }, + { n = 5, a = -1, b = 1, steepness=1, expected = [-1, -0.52999257559681102, 0, 0.52999257559681102, 1] }, + { n = 5, a = -1, b = 1, steepness=2, expected = [-1, -0.60677613351703629, 0, 0.60677613351703629, 1] }, + { n = 5, a = -1, b = 1, steepness=4, expected = [-1, -0.79001282919298697, 0, 0.79001282919298697, 1] }, + { n = 5, a = -1, b = 1, steepness=10, expected = [-1, -0.98670388665841969, 0, 0.98670388665841969, 1] }, + { n = 6, a = -1, b = 1, steepness=0.1, expected = [-1, -0.60031983154187126, -0.20015996694108253, 0.20015996694108253, 0.60031983154187126, 1] }, + { n = 6, a = -1, b = 1, steepness=0.25, expected = [-1, -0.60199343498757418, -0.20099871022277013, 0.20099871022277013, 0.60199343498757418, 1] }, + { n = 6, a = -1, b = 1, steepness=0.5, expected = [-1, -0.60789583024059178, -0.20397945369933306, 0.20397945369933306, 0.60789583024059178, 1] }, + { n = 6, a = -1, b = 1, steepness=1, expected = [-1, -0.63038692217974533, -0.21567689720915884, 0.21567689720915884, 0.63038692217974533, 1] }, + { n = 6, a = -1, b = 1, steepness=2, expected = [-1, -0.70516503153055752, -0.25916075994202876, 0.25916075994202876, 0.70516503153055752, 1] }, + { n = 6, a = -1, b = 1, steepness=4, expected = [-1, -0.86476219585604769, -0.39412665167250031, 0.39412665167250031, 0.86476219585604769, 1] }, + { n = 6, a = -1, b = 1, steepness=10, expected = [-1, -0.99514510862069252, -0.76166331173780836, 0.76166331173780836, 0.99514510862069252, 1] }, +] + +[erf] +test_cases = [ + { n = 0, a = -1, b = 1, steepness=0.1, expected = [] }, + { n = 0, a = -1, b = 1, steepness=0.25, expected = [] }, + { n = 0, a = -1, b = 1, steepness=0.5, expected = [] }, + { n = 0, a = -1, b = 1, steepness=1, expected = [] }, + { n = 0, a = -1, b = 1, steepness=2, expected = [] }, + { n = 0, a = -1, b = 1, steepness=4, expected = [] }, + { n = 0, a = -1, b = 1, steepness=10, expected = [] }, + { n = 1, a = -1, b = 1, steepness=0.1, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=0.25, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=0.5, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=1, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=2, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=4, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=10, expected = [0] }, + { n = 2, a = -1, b = 1, steepness=0.1, expected = [-0.11246291601828489, 0.11246291601828489] }, + { n = 2, a = -1, b = 1, steepness=0.25, expected = [-0.27632639016823693, 0.27632639016823693] }, + { n = 2, a = -1, b = 1, steepness=0.5, expected = [-0.52049987781304654, 0.52049987781304654] }, + { n = 2, a = -1, b = 1, steepness=1, expected = [-0.84270079294971487, 0.84270079294971487] }, + { n = 2, a = -1, b = 1, steepness=2, expected = [-0.99532226501895273, 0.99532226501895273] }, + { n = 2, a = -1, b = 1, steepness=4, expected = [-0.9999999845827421, 0.9999999845827421] }, + { n = 2, a = -1, b = 1, steepness=10, expected = [-1, 1] }, + { n = 3, a = -1, b = 1, steepness=0.1, expected = [-0.11246291601828489, 0, 0.11246291601828489] }, + { n = 3, a = -1, b = 1, steepness=0.25, expected = [-0.27632639016823693, 0, 0.27632639016823693] }, + { n = 3, a = -1, b = 1, steepness=0.5, expected = [-0.52049987781304654, 0, 0.52049987781304654] }, + { n = 3, a = -1, b = 1, steepness=1, expected = [-0.84270079294971487, 0, 0.84270079294971487] }, + { n = 3, a = -1, b = 1, steepness=2, expected = [-0.99532226501895273, 0, 0.99532226501895273] }, + { n = 3, a = -1, b = 1, steepness=4, expected = [-0.9999999845827421, 0, 0.9999999845827421] }, + { n = 3, a = -1, b = 1, steepness=10, expected = [-1, 0, 1] }, + { n = 4, a = -1, b = 1, steepness=0.1, expected = [-0.11246291601828489, -0.037598712938490057, 0.037598712938490057, 0.11246291601828489] }, + { n = 4, a = -1, b = 1, steepness=0.25, expected = [-0.27632639016823693, -0.09381438424507172, 0.09381438424507172, 0.27632639016823693] }, + { n = 4, a = -1, b = 1, steepness=0.5, expected = [-0.52049987781304654, -0.1863362842332081, 0.1863362842332081, 0.52049987781304654] }, + { n = 4, a = -1, b = 1, steepness=1, expected = [-0.84270079294971487, -0.36264811176606293, 0.36264811176606293, 0.84270079294971487] }, + { n = 4, a = -1, b = 1, steepness=2, expected = [-0.99532226501895273, -0.65422141384883968, 0.65422141384883968, 0.99532226501895273] }, + { n = 4, a = -1, b = 1, steepness=4, expected = [-0.9999999845827421, -0.94065356120808012, 0.94065356120808012, 0.9999999845827421] }, + { n = 4, a = -1, b = 1, steepness=10, expected = [-1, -0.99999757153252702, 0.99999757153252702, 1] }, + { n = 5, a = -1, b = 1, steepness=0.1, expected = [-0.11246291601828489, -0.056371977797016624, 0, 0.056371977797016624, 0.11246291601828489] }, + { n = 5, a = -1, b = 1, steepness=0.25, expected = [-0.27632639016823693, -0.14031620480133382, 0, 0.14031620480133382, 0.27632639016823693] }, + { n = 5, a = -1, b = 1, steepness=0.5, expected = [-0.52049987781304654, -0.27632639016823693, 0, 0.27632639016823693, 0.52049987781304654] }, + { n = 5, a = -1, b = 1, steepness=1, expected = [-0.84270079294971487, -0.52049987781304654, 0, 0.52049987781304654, 0.84270079294971487] }, + { n = 5, a = -1, b = 1, steepness=2, expected = [-0.99532226501895273, -0.84270079294971487, 0, 0.84270079294971487, 0.99532226501895273] }, + { n = 5, a = -1, b = 1, steepness=4, expected = [-0.9999999845827421, -0.99532226501895273, 0, 0.99532226501895273, 0.9999999845827421] }, + { n = 5, a = -1, b = 1, steepness=10, expected = [-1, -0.99999999999846254, 0, 0.99999999999846254, 1] }, + { n = 6, a = -1, b = 1, steepness=0.1, expected = [-0.11246291601828489, -0.067621594393308442, -0.022564574691844944, 0.022564574691844944, 0.067621594393308442, 0.11246291601828489] }, + { n = 6, a = -1, b = 1, steepness=0.25, expected = [-0.27632639016823693, -0.16799597142736349, -0.056371977797016624, 0.056371977797016624, 0.16799597142736349, 0.27632639016823693] }, + { n = 6, a = -1, b = 1, steepness=0.5, expected = [-0.52049987781304654, -0.32862675945912743, -0.11246291601828489, 0.11246291601828489, 0.32862675945912743, 0.52049987781304654] }, + { n = 6, a = -1, b = 1, steepness=1, expected = [-0.84270079294971487, -0.60385609084792592, -0.22270258921047845, 0.22270258921047845, 0.60385609084792592, 0.84270079294971487] }, + { n = 6, a = -1, b = 1, steepness=2, expected = [-0.99532226501895273, -0.91031397822963538, -0.42839235504666846, 0.42839235504666846, 0.91031397822963538, 0.99532226501895273] }, + { n = 6, a = -1, b = 1, steepness=4, expected = [-0.9999999845827421, -0.99931148610335492, -0.74210096470766049, 0.74210096470766049, 0.99931148610335492, 0.9999999845827421] }, + { n = 6, a = -1, b = 1, steepness=10, expected = [-1, -0.99999999999999998, -0.99532226501895273, 0.99532226501895273, 0.99999999999999998, 1] }, +] + +[erf_stretched] +test_cases = [ + { n = 0, a = -1, b = 1, steepness=0.1, expected = [] }, + { n = 0, a = -1, b = 1, steepness=0.25, expected = [] }, + { n = 0, a = -1, b = 1, steepness=0.5, expected = [] }, + { n = 0, a = -1, b = 1, steepness=1, expected = [] }, + { n = 0, a = -1, b = 1, steepness=2, expected = [] }, + { n = 0, a = -1, b = 1, steepness=4, expected = [] }, + { n = 0, a = -1, b = 1, steepness=10, expected = [] }, + { n = 1, a = -1, b = 1, steepness=0.1, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=0.25, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=0.5, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=1, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=2, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=4, expected = [0] }, + { n = 1, a = -1, b = 1, steepness=10, expected = [0] }, + { n = 2, a = -1, b = 1, steepness=0.1, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, steepness=0.25, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, steepness=0.5, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, steepness=1, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, steepness=2, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, steepness=4, expected = [-1, 1] }, + { n = 2, a = -1, b = 1, steepness=10, expected = [-1, 1] }, + { n = 3, a = -1, b = 1, steepness=0.1, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, steepness=0.25, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, steepness=0.5, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, steepness=1, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, steepness=2, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, steepness=4, expected = [-1, 0, 1] }, + { n = 3, a = -1, b = 1, steepness=10, expected = [-1, 0, 1] }, + { n = 4, a = -1, b = 1, steepness=0.1, expected = [-1, -0.33432098570498593, 0.33432098570498593, 1] }, + { n = 4, a = -1, b = 1, steepness=0.25, expected = [-1, -0.33950569899586616, 0.33950569899586616, 1] }, + { n = 4, a = -1, b = 1, steepness=0.5, expected = [-1, -0.35799486642749315, 0.35799486642749315, 1] }, + { n = 4, a = -1, b = 1, steepness=1, expected = [-1, -0.43034029966517743, 0.43034029966517743, 1] }, + { n = 4, a = -1, b = 1, steepness=2, expected = [-1, -0.65729607067152479, 0.65729607067152479, 1] }, + { n = 4, a = -1, b = 1, steepness=4, expected = [-1, -0.94065357571037889, 0.94065357571037889, 1] }, + { n = 4, a = -1, b = 1, steepness=10, expected = [-1, -0.99999757153252702, 0.99999757153252702, 1] }, + { n = 5, a = -1, b = 1, steepness=0.1, expected = [-1, -0.50124947665283133, 0, 0.50124947665283133, 1] }, + { n = 5, a = -1, b = 1, steepness=0.25, expected = [-1, -0.50779154577275274, 0, 0.50779154577275274, 1] }, + { n = 5, a = -1, b = 1, steepness=0.5, expected = [-1, -0.53088656106752827, 0, 0.53088656106752827, 1] }, + { n = 5, a = -1, b = 1, steepness=1, expected = [-1, -0.61765680318293647, 0, 0.61765680318293647, 1] }, + { n = 5, a = -1, b = 1, steepness=2, expected = [-1, -0.84666124989544801, 0, 0.84666124989544801, 1] }, + { n = 5, a = -1, b = 1, steepness=4, expected = [-1, -0.99532228036409302, 0, 0.99532228036409302, 1] }, + { n = 5, a = -1, b = 1, steepness=10, expected = [-1, -0.99999999999846254, 0, 0.99999999999846254, 1] }, + { n = 6, a = -1, b = 1, steepness=0.1, expected = [-1, -0.60127904190492553, -0.20064013535071651, 0.20064013535071651, 0.60127904190492553, 1] }, + { n = 6, a = -1, b = 1, steepness=0.25, expected = [-1, -0.6079620962915696, -0.2040050454923811, 0.2040050454923811, 0.6079620962915696, 1] }, + { n = 6, a = -1, b = 1, steepness=0.5, expected = [-1, -0.63136760154469006, -0.21606713240897127, 0.21606713240897127, 0.63136760154469006, 1] }, + { n = 6, a = -1, b = 1, steepness=1, expected = [-1, -0.7165723539125219, -0.26427243343506315, 0.26427243343506315, 0.7165723539125219, 1] }, + { n = 6, a = -1, b = 1, steepness=2, expected = [-1, -0.91459219814830663, -0.43040567874618086, 0.43040567874618086, 0.91459219814830663, 1] }, + { n = 6, a = -1, b = 1, steepness=4, expected = [-1, -0.99931150150999806, -0.74210097614882262, 0.74210097614882262, 0.99931150150999806, 1] }, + { n = 6, a = -1, b = 1, steepness=10, expected = [-1, -0.99999999999999998, -0.99532226501895273, 0.99532226501895273, 0.99999999999999998, 1] }, +] \ No newline at end of file diff --git a/dist/generate.py b/dist/generate.py new file mode 100755 index 0000000..1617b7a --- /dev/null +++ b/dist/generate.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python3 +import argparse +import inspect +from mpmath import mp + +mp.dps = 100 + +precision = 17 +zero_threshold = mp.mpf('1e-80') + +a, b = -1, 1 + +max_n = 6 + +ratios = [mp.mpf('0.1'), mp.mpf('0.25'), mp.mpf('0.5'), mp.mpf('1'), mp.mpf('2'), mp.mpf('4'), mp.mpf('10')] +steepnesses = [mp.mpf('0.1'), mp.mpf('0.25'), mp.mpf('0.5'), mp.mpf('1'), mp.mpf('2'), mp.mpf('4'), mp.mpf('10')] +mapping_intervals = [ + [0, 1], + [-2, 2], + [-1000, -900], + [1000, 2000], + [-9999, 9999], +] + + +def format_number(number): + return '0' if abs(number) < zero_threshold else mp.nstr(number, n=precision).removesuffix('.0') + + +def format_test_case(n, a, b, points, **kwargs): + params = ''.join([f', {key}={format_number(value)}' for key, value in kwargs.items() if value is not None]) + points_str = ', '.join(format_number(x) for x in points) + return f'\t{{ n = {n}, a = {format_number(a)}, b = {format_number(b)}{params}, expected = [{points_str}] }},' + + +def stretched(points): + if not points: + return [] + if len(points) == 1 or min(points) == max(points): + return [(a+b)/2] * len(points) + return [a + (p-min(points)) * (b-a) / (max(points)-min(points)) for p in points] + + +def uniform(n): + return [0] if n == 1 else [2 * mp.mpf(k) / (n-1) - 1 for k in range(n)] + + +def chebyshev(n): + return [-mp.cos((2*k - 1) * mp.pi / (2*n)) for k in range(1, n + 1)] + + +def chebyshev_stretched(n): + return stretched(chebyshev(n)) + + +def chebyshev_ellipse(n, ratio): + return [mp.sign(2*k+1 - n) / mp.sqrt(1 + (mp.tan(mp.pi * (2*mp.mpf(k) + 1) / (2*n)) / ratio) ** 2) for k in range(n)] + + +def chebyshev_ellipse_stretched(n, ratio): + return stretched(chebyshev_ellipse(n, ratio)) + + +def circle_proj(n): + return [0] if n == 1 else [mp.sin(mp.pi / 2 * (2 * mp.mpf(k) / (n-1) - 1)) for k in range(n)] + + +def ellipse_proj(n, ratio): + return [0] if n == 1 else [mp.sign(2*k+1 - n) / mp.sqrt(1 + (mp.tan(mp.pi * mp.mpf(k) / (n-1)) / ratio) ** 2) for k in range(n)] + + +def sigmoid(n, steepness): + return [0] if n == 1 else [2 / (1 + mp.exp(-steepness * (2 * mp.mpf(k) / (n-1) - 1))) - 1 for k in range(n)] + + +def sigmoid_stretched(n, steepness): + return stretched(sigmoid(n, steepness)) + + +def erf(n, steepness): + return [0] if n == 1 else [mp.erf(steepness * (2 * mp.mpf(k) / (n-1) - 1)) for k in range(n)] + + +def erf_stretched(n, steepness): + return stretched(erf(n, steepness)) + + +def generate_test_cases(): + mapping_intervals_section = 'mapping_intervals = [\n' + '\n'.join([f'\t[{i[0]}, {i[1]}],' for i in mapping_intervals]) + '\n]' + + functions = [uniform, chebyshev, chebyshev_stretched, chebyshev_ellipse, chebyshev_ellipse_stretched, + circle_proj, ellipse_proj, sigmoid, sigmoid_stretched, erf, erf_stretched] + sections = [] + + for func in functions: + func_cases = [] + for n in range(max_n + 1): + func_parameter_names = [p.name for p in inspect.signature(func).parameters.values()] + if 'ratio' in func_parameter_names: + for ratio in ratios: + func_cases.append(format_test_case(n, a, b, func(n, ratio), ratio=ratio)) + elif 'steepness' in func_parameter_names: + for steepness in steepnesses: + func_cases.append(format_test_case(n, a, b, func(n, steepness), steepness=steepness)) + else: + func_cases.append(format_test_case(n, a, b, func(n))) + section = f'[{func.__name__}]\ntest_cases = [\n' + '\n'.join(func_cases) + '\n]' + sections.append(section) + + return mapping_intervals_section + '\n\n' + '\n\n'.join(sections) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('-o', '--output', type=str, help="Output file") + args = parser.parse_args() + if not args.output: + print(generate_test_cases(), end='') + else: + with open(args.output, 'w') as file: + file.write(generate_test_cases()) + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..64d3e72 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +mpmath \ No newline at end of file diff --git a/verify_data.py b/verify_data.py new file mode 100755 index 0000000..ac97250 --- /dev/null +++ b/verify_data.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 +import subprocess +import sys +import tempfile + +def execute_command(command): + print(' '.join(command), flush=True) + subprocess.check_call(command) + +def check_data(original, generator): + with tempfile.NamedTemporaryFile() as tmpfile: + execute_command([generator, '-o', tmpfile.name]) + execute_command(['diff', original, tmpfile.name]) + +check_data('dist/dist.toml', 'dist/generate.py') \ No newline at end of file