{"id":21542,"library":"loman","title":"Loman","description":"Loman tracks the state of computations and the dependencies between them, enabling full and partial recalculations. It provides a directed acyclic graph (DAG) of computations with caching, error handling, and serialization support. Current version is 0.6.0, released in April 2026. Release cadence is approximately monthly.","status":"active","version":"0.6.0","language":"python","source_language":"en","source_url":"https://github.com/janusassetallocation/loman","tags":["computation","dependency","dag","caching","partial-recomputation"],"install":[{"cmd":"pip install loman","lang":"bash","label":"PyPI"}],"dependencies":[],"imports":[{"note":"","wrong":"","symbol":"Computation","correct":"from loman import Computation"},{"note":"","wrong":"","symbol":"ComputationNode","correct":"from loman import ComputationNode"}],"quickstart":{"code":"from loman import Computation\n\n# Create a computation graph\ncomp = Computation()\n\n# Define nodes (computations)\n@comp.node('a')\ndef compute_a():\n    return 1\n\n@comp.node('b', depends_on=['a'])\ndef compute_b(a):\n    return a + 2\n\n# Run the computation\ncomp.compute_all()\nprint(comp.get_value('b'))  # Output: 3","lang":"python","description":"Define a simple computation graph with two nodes and run it."},"warnings":[{"fix":"Replace any usage of dill-specific serialization with standard pickle or check your serialization hooks.","message":"In version 0.6.0, the dill dependency was removed, and serialization now uses Python's built-in pickle. Custom serialization logic may break if it relied on dill.","severity":"breaking","affected_versions":">=0.6.0"},{"fix":"Ensure node functions are pure (no side effects) or use the 'always_recompute' parameter.","message":"Node functions must not have side effects on mutable global state, or caching may produce unexpected results. Loman caches results by default, so if a node modifies an external list, partial recomputations will not re-trigger that side effect.","severity":"gotcha","affected_versions":"all"},{"fix":"Use 'compute_all' then 'get_value' instead.","message":"The 'compute_and_get_value' method is deprecated as of version 0.5.4. It may be removed in a future release.","severity":"deprecated","affected_versions":">=0.5.4"}],"env_vars":null,"last_verified":"2026-04-27T00:00:00.000Z","next_check":"2026-07-26T00:00:00.000Z","problems":[{"fix":"Upgrade to loman 0.6.0 or later, and ensure your code does not import dill. If you need dill, install it separately: pip install dill","cause":"dill was removed as a dependency in loman 0.6.0.","error":"ModuleNotFoundError: No module named 'dill'"},{"fix":"Ensure the node is defined and computed: call comp.compute_all() or compute the specific node before calling get_value('node_name').","cause":"Trying to get the value of a node that hasn't been computed yet or doesn't exist.","error":"KeyError: 'node_name'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}