[flake8]
max-line-length = 127
max-complexity = 10
ignore = 
    E203,  # whitespace before ':'
    E501,  # line too long (handled by black)
    W503,  # line break before binary operator
    F401,  # imported but unused (common in __init__.py)
    F841,  # local variable assigned but never used (common in research code)
exclude = 
    .git,
    __pycache__,
    build,
    dist,
    *.egg-info,
    old_archive,
    .pytest_cache
per-file-ignores = 
    __init__.py:F401
    *_modules/__init__.py:F401
    tests/*:F401,F841