- Deprecate the NamespacePackageEncountered exception.
- Improve contribution experience for Windows developers using Just.
- Tweak Just commands for running version-specific Python tests.
- Remove typing-extensions as a dependency.
- Make package FIPS compatible by marking blake2 hashing with usedforsecurity=False.
- Raise ModuleNotPresent instead of an unclear error when find_modules_that_directly_import or find_modules_directly_imported_by is called with a module that is not in the graph. (#113)
- Raise ValueError instead of pyo3_runtime.PanicException when a duplicate layer module is passed to find_illegal_dependencies_for_layers.
- Support building graph from namespace packages, not just their portions.
- Bugfix: support Python 3.14 syntax such as t-strings as syntax errors. (#268)
- Drop support for Python 3.9.
- Add nominate_cycle_breakers method.
- Officially support Python 3.14.
- Improve contribution / CI tooling using Just and UV.
- Speed up graph building by switching from Python multiprocessing to Rust-based multithreading for import scanning.
This release was yanked due to poor performance when building very large graphs.
- Add closed layers to layer contract.
- Rename default repository branch to 'main'.
- Optimise find_shortest_chains query.
- Use Rust instead of Python's built-in ast module for import parsing.
- Provide more control of multiprocessing via
GRIMP_MIN_MULTIPROCESSING_MODULESenvironment variable.
- Use joblib instead of multiprocessing for CPU parallelism. Fixes #208.
- Accelerate import scanning via CPU parallelism (multiprocessing).
- Fixed handling of within-descendant-imports when squashing modules (see Issue 195).
- Added find_matching_modules and find_matching_direct_imports methods.
- Added as_packages option to the find_shortest_chain method.
- Reimplement the graph in Rust. This is a substantial rewrite that, mostly, significantly improves performance, but there may be certain operations that are slower than before.
- Added as_packages option to the find_shortest_chains method.
- Include 3.13 wheel in release.
- Drop support for Python 3.8.
- Officially support Python 3.13.
- Speed up adding and removing modules.
- Upgrade PyO3 to 0.21.
- Follow symbolic links while walking through module files.
- Speed up find_illegal_dependencies_for_layers by using thread concurrency.
- Allow configuring sibling layer independence.
- Fix bug where a warning would be logged if a non-Python file with multiple dots in the filename was encountered.
- Formally add support for Python 3.12.
- Add exclude_type_checking_imports argument to build_graph.
- Stable release of functionality from 3.0b1-3.
- Support for independent layers in find_illegal_dependencies_for_layers.
- Switch to pyproject.toml.
- Rename upstream/downstream in find_illegal_dependencies_for_layers to importer/imported. The original names were accidentally used in reverse; the new names have less potential for confusion.
- Use Rust extension module for find_illegal_dependencies_for_layers.
- Log cache activity.
- Drop support for Python 3.7.
- Add find_illegal_dependencies_for_layers method.
- Change cache filename scheme to use a hash.
- Ignore modules with dots in the filename.
- Add caching.
- Annotate get_import_details return value with a DetailedImport.
- Officially support Python 3.11.
- Significantly speed up graph copying.
- Remove find_all_simple_chains method.
- No longer use a networkx graph internally.
- Fix bug where import details remained stored in the graph after removing modules or imports.
- Officially support Python 3.9 and 3.10.
- Drop support for Python 3.6.
- Support namespaced packages.
- Raise custom exception (NamespacePackageEncountered) if code under analysis appears to be a namespace package.
- Raise custom exception (SourceSyntaxError) if code under analysis contains syntax error.
- Better handling of source code containing non-ascii compatible characters
- Significantly increase the speed of building the graph.
- Clarify behaviour of get_import_details.
- Add module_is_squashed method.
- Add squash_module method.
- Add find_all_simple_chains method.
- Officially support Python 3.8.
- Support multiple root packages.
- Add find_shortest_chains method.
- Add remove_module method.
- Fix Windows incompatibility.
- Fix bug with calling importlib.util.find_spec.
- Add as_packages parameter to direct_import_exists.
- Add count_imports method.
- Support building the graph with external packages.
- Rename get_shortest_path to get_shortest_chain.
- Rename path_exists to chain_exists.
- Rename and reorder the kwargs for get_shortest_chain and chain_exists.
- Raise ValueError if modules with shared descendants are passed to chain_exists if as_packages=True.
- Improve repr of ImportGraph.
- Fix bug with find_shortest_path using upstream/downstream the wrong way around.
- Fix bug with analysing relative imports from within __init__.py files.
- Stop skipping analysing packages called
migrations. - Deal with invalid imports by warning instead of raising an exception.
- Rename NetworkXBackedImportGraph to ImportGraph.
- Fix PyPI readme rendering.
- Implement core functionality.
- Release blank project on PyPI.