Skip to main content

A fast implementation of the Cassowary constraint solver

Project description

https://github.com/nucleic/kiwi/workflows/Continuous%20Integration/badge.svg https://github.com/nucleic/kiwi/workflows/Documentation%20building/badge.svg https://codecov.io/gh/nucleic/kiwi/branch/main/graph/badge.svg Documentation Status

Kiwi is an efficient C++ implementation of the Cassowary constraint solving algorithm. Kiwi is an implementation of the algorithm based on the seminal Cassowary paper. It is not a refactoring of the original C++ solver. Kiwi has been designed from the ground up to be lightweight and fast. Kiwi ranges from 10x to 500x faster than the original Cassowary solver with typical use cases gaining a 40x improvement. Memory savings are consistently > 5x.

In addition to the C++ solver, Kiwi ships with hand-rolled Python bindings for Python 3.7+.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kiwisolver-1.4.7.tar.gz (97.3 kB view hashes)

Uploaded Source

Built Distributions

kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl (55.7 kB view hashes)

Uploaded PyPy Windows x86-64

kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (80.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (80.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (84.3 kB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl (57.6 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (59.5 kB view hashes)

Uploaded PyPy macOS 10.15+ x86-64

kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl (55.8 kB view hashes)

Uploaded PyPy Windows x86-64

kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (80.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (80.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (84.3 kB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl (57.1 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl (58.7 kB view hashes)

Uploaded PyPy macOS 10.15+ x86-64

kiwisolver-1.4.7-pp38-pypy38_pp73-win_amd64.whl (56.1 kB view hashes)

Uploaded PyPy Windows x86-64

kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (78.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (95.3 kB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ x86-64

kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (103.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686

kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_11_0_arm64.whl (57.8 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (59.7 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

kiwisolver-1.4.7-cp313-cp313-win_arm64.whl (48.5 kB view hashes)

Uploaded CPython 3.13 Windows ARM64

kiwisolver-1.4.7-cp313-cp313-win_amd64.whl (55.9 kB view hashes)

Uploaded CPython 3.13 Windows x86-64

kiwisolver-1.4.7-cp313-cp313-win32.whl (46.4 kB view hashes)

Uploaded CPython 3.13 Windows x86

kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl (2.3 MB view hashes)

Uploaded CPython 3.13 musllinux: musl 1.2+ x86-64

kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl (2.5 MB view hashes)

Uploaded CPython 3.13 musllinux: musl 1.2+ s390x

kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl (2.4 MB view hashes)

Uploaded CPython 3.13 musllinux: musl 1.2+ ppc64le

kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl (2.4 MB view hashes)

Uploaded CPython 3.13 musllinux: musl 1.2+ i686

kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl (2.2 MB view hashes)

Uploaded CPython 3.13 musllinux: musl 1.2+ ARM64

kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view hashes)

Uploaded CPython 3.13 manylinux: glibc 2.17+ x86-64

kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view hashes)

Uploaded CPython 3.13 manylinux: glibc 2.17+ s390x

kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.6 MB view hashes)

Uploaded CPython 3.13 manylinux: glibc 2.17+ ppc64le

kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view hashes)

Uploaded CPython 3.13 manylinux: glibc 2.17+ ARM64

kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.13 manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl (63.9 kB view hashes)

Uploaded CPython 3.13 macOS 11.0+ ARM64

kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl (65.6 kB view hashes)

Uploaded CPython 3.13 macOS 10.13+ x86-64

kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl (121.9 kB view hashes)

Uploaded CPython 3.13 macOS 10.13+ universal2 (ARM64, x86-64)

kiwisolver-1.4.7-cp312-cp312-win_arm64.whl (48.5 kB view hashes)

Uploaded CPython 3.12 Windows ARM64

kiwisolver-1.4.7-cp312-cp312-win_amd64.whl (55.9 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

kiwisolver-1.4.7-cp312-cp312-win32.whl (46.4 kB view hashes)

Uploaded CPython 3.12 Windows x86

kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl (2.3 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl (2.5 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ s390x

kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl (2.4 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ ppc64le

kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl (2.4 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ i686

kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl (2.2 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.6 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl (63.9 kB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl (65.5 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl (121.8 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)

kiwisolver-1.4.7-cp311-cp311-win_arm64.whl (48.5 kB view hashes)

Uploaded CPython 3.11 Windows ARM64

kiwisolver-1.4.7-cp311-cp311-win_amd64.whl (56.0 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

kiwisolver-1.4.7-cp311-cp311-win32.whl (46.6 kB view hashes)

Uploaded CPython 3.11 Windows x86

kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl (2.3 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl (2.5 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ s390x

kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl (2.3 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ ppc64le

kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl (2.4 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ i686

kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl (2.2 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.5 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (1.3 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl (64.3 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl (65.8 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl (122.4 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

kiwisolver-1.4.7-cp310-cp310-win_arm64.whl (48.3 kB view hashes)

Uploaded CPython 3.10 Windows ARM64

kiwisolver-1.4.7-cp310-cp310-win_amd64.whl (55.9 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

kiwisolver-1.4.7-cp310-cp310-win32.whl (46.6 kB view hashes)

Uploaded CPython 3.10 Windows x86

kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl (2.3 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl (2.4 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ s390x

kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl (2.3 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ ppc64le

kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl (2.3 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ i686

kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl (2.2 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.4 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.5 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.6 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.12+ x86-64

kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl (1.6 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.12+ i686

kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl (64.3 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl (65.8 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl (122.4 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

kiwisolver-1.4.7-cp39-cp39-win_arm64.whl (48.5 kB view hashes)

Uploaded CPython 3.9 Windows ARM64

kiwisolver-1.4.7-cp39-cp39-win_amd64.whl (55.8 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

kiwisolver-1.4.7-cp39-cp39-win32.whl (47.0 kB view hashes)

Uploaded CPython 3.9 Windows x86

kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl (2.3 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl (2.4 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ s390x

kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl (2.3 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ ppc64le

kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl (2.3 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ i686

kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl (2.2 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.4 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.5 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.6 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64

kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl (1.6 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ i686

kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl (64.3 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl (65.8 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl (122.4 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

kiwisolver-1.4.7-cp38-cp38-win_amd64.whl (55.8 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

kiwisolver-1.4.7-cp38-cp38-win32.whl (46.9 kB view hashes)

Uploaded CPython 3.8 Windows x86

kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_x86_64.whl (2.3 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_s390x.whl (2.4 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ s390x

kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl (2.3 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ ppc64le

kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_i686.whl (2.3 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ i686

kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_aarch64.whl (2.2 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARM64

kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.4 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.5 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.2 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.5+ x86-64

kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl (1.1 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.5+ i686

kiwisolver-1.4.7-cp38-cp38-macosx_11_0_arm64.whl (64.3 kB view hashes)

Uploaded CPython 3.8 macOS 11.0+ ARM64

kiwisolver-1.4.7-cp38-cp38-macosx_10_9_x86_64.whl (65.7 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

kiwisolver-1.4.7-cp38-cp38-macosx_10_9_universal2.whl (122.3 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page