{"id":28283,"library":"springable","title":"Springable","description":"Nonlinear spring assembly solver and visualization library. Version 1.0.1 supports Python >=3.10. Uses flexel formulation for modeling complex spring networks. Active development, monthly releases.","status":"active","version":"1.0.1","language":"python","source_language":"en","source_url":"https://github.com/ducarme/springable","tags":["spring","nonlinear","assembly","solver","visualization"],"install":[{"cmd":"pip install springable","lang":"bash","label":"Install from PyPI"}],"dependencies":[{"reason":"Core numerical operations","package":"numpy","optional":false},{"reason":"Visualization","package":"matplotlib","optional":false}],"imports":[{"note":"Flexel is exposed at top level, not in submodule","wrong":"from springable.core import Flexel","symbol":"Flexel","correct":"from springable import Flexel"},{"note":"Spring is top-level","wrong":"from springable.elements import Spring","symbol":"Spring","correct":"from springable import Spring"},{"note":"","wrong":"","symbol":"Node","correct":"from springable import Node"},{"note":"","wrong":"","symbol":"Assembly","correct":"from springable import Assembly"}],"quickstart":{"code":"from springable import Node, Spring, Assembly\n\n# Create nodes\nn1 = Node(0, 0)\nn2 = Node(1, 0)\nn3 = Node(0.5, 0.866)\n\n# Create springs\nspring1 = Spring(n1, n2, stiffness=10.0, rest_length=1.0)\nspring2 = Spring(n2, n3, stiffness=10.0, rest_length=1.0)\nspring3 = Spring(n3, n1, stiffness=10.0, rest_length=1.0)\n\n# Assemble and solve\nassembly = Assembly([n1, n2, n3], [spring1, spring2, spring3])\nsolution = assembly.solve()\nprint(solution.node_positions)\n\n# Plot\nassembly.plot()","lang":"python","description":"Basic usage: create nodes and springs, solve, and visualize."},"warnings":[{"fix":"Ensure rest_length > 0 for all springs.","message":"Rest lengths must be positive floats; zero or negative values cause solver errors.","severity":"gotcha","affected_versions":"all"},{"fix":"Use from springable import Flexel, Spring, Node, Assembly instead of from springable.x import y.","message":"Import paths changed between v0.x and v1.0.0; submodule imports no longer work.","severity":"breaking","affected_versions":"0.x"},{"fix":"Upgrade to 1.0.1.","message":"The old syntax using ast.Num is deprecated and will be removed in Python 3.14. Version 1.0.1 fixes this bug.","severity":"deprecated","affected_versions":"<=1.0.0"},{"fix":"Wrap with list() if you need all results immediately.","message":"Assembly.solve() may return List[float] or generator; check return type.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-09T00:00:00.000Z","next_check":"2026-08-07T00:00:00.000Z","problems":[{"fix":"Use: from springable import Flexel","cause":"Import from wrong module path; Flexel is not in a submodule.","error":"AttributeError: module 'springable' has no attribute 'Flexel'"},{"fix":"Set rest_length > 0.","cause":"Provided zero or negative rest length to Spring constructor.","error":"ValueError: rest_length must be positive"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}