{"bomFormat":"CycloneDX","specVersion":"1.5","version":1,"serialNumber":"urn:uuid:1e9433ac-3e5c-4303-9497-ae6edad358b0","metadata":{"timestamp":"2026-06-14T21:50:24Z","tools":[{"vendor":"Ecosystems","name":"Ecosystems SBOM Generator"}],"component":{"type":"application","name":"BrianPugh/hdiffpatch-python"}},"components":[{"type":"library","name":"actions/checkout","version":"v4","purl":"pkg:githubactions/actions/checkout","properties":[{"name":"filePath","value":".github/workflows/build_wheels.yaml"}]},{"type":"library","name":"actions/setup-python","version":"v5","purl":"pkg:githubactions/actions/setup-python","properties":[{"name":"filePath","value":".github/workflows/build_wheels.yaml"}]},{"type":"library","name":"actions/cache","version":"v4","purl":"pkg:githubactions/actions/cache","properties":[{"name":"filePath","value":".github/workflows/build_wheels.yaml"}]},{"type":"library","name":"snok/install-poetry","version":"v1","purl":"pkg:githubactions/snok/install-poetry","properties":[{"name":"filePath","value":".github/workflows/build_wheels.yaml"}]},{"type":"library","name":"actions/upload-artifact","version":"v4","purl":"pkg:githubactions/actions/upload-artifact","properties":[{"name":"filePath","value":".github/workflows/build_wheels.yaml"}]},{"type":"library","name":"pypa/cibuildwheel","version":"v2.23.3","purl":"pkg:githubactions/pypa/cibuildwheel","properties":[{"name":"filePath","value":".github/workflows/build_wheels.yaml"}]},{"type":"library","name":"docker/setup-qemu-action","version":"v3","purl":"pkg:githubactions/docker/setup-qemu-action","properties":[{"name":"filePath","value":".github/workflows/build_wheels.yaml"}]},{"type":"library","name":"actions/download-artifact","version":"v4","purl":"pkg:githubactions/actions/download-artifact","properties":[{"name":"filePath","value":".github/workflows/build_wheels.yaml"}]},{"type":"library","name":"pypa/gh-action-pypi-publish","version":"release/v1","purl":"pkg:githubactions/pypa/gh-action-pypi-publish","properties":[{"name":"filePath","value":".github/workflows/build_wheels.yaml"}]},{"type":"library","name":"actions/checkout","version":"v4","purl":"pkg:githubactions/actions/checkout","properties":[{"name":"filePath","value":".github/workflows/tests.yaml"}]},{"type":"library","name":"actions/setup-python","version":"v5","purl":"pkg:githubactions/actions/setup-python","properties":[{"name":"filePath","value":".github/workflows/tests.yaml"}]},{"type":"library","name":"actions/cache","version":"v4","purl":"pkg:githubactions/actions/cache","properties":[{"name":"filePath","value":".github/workflows/tests.yaml"}]},{"type":"library","name":"snok/install-poetry","version":"v1","purl":"pkg:githubactions/snok/install-poetry","properties":[{"name":"filePath","value":".github/workflows/tests.yaml"}]},{"type":"library","name":"andstor/file-existence-action","version":"v3","purl":"pkg:githubactions/andstor/file-existence-action","properties":[{"name":"filePath","value":".github/workflows/tests.yaml"}]},{"type":"library","name":"codecov/codecov-action","version":"v4","purl":"pkg:githubactions/codecov/codecov-action","properties":[{"name":"filePath","value":".github/workflows/tests.yaml"}]},{"type":"library","name":"asttokens","version":"3.0.0","purl":"pkg:pypi/asttokens","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"attrs","version":"25.3.0","purl":"pkg:pypi/attrs","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"cfgv","version":"3.4.0","purl":"pkg:pypi/cfgv","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"colorama","version":"0.4.6","purl":"pkg:pypi/colorama","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"coverage","version":"7.9.2","purl":"pkg:pypi/coverage","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"cython","version":"3.1.2","purl":"pkg:pypi/cython","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"decorator","version":"5.2.1","purl":"pkg:pypi/decorator","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"distlib","version":"0.3.9","purl":"pkg:pypi/distlib","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"exceptiongroup","version":"1.3.0","purl":"pkg:pypi/exceptiongroup","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"executing","version":"2.2.0","purl":"pkg:pypi/executing","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"filelock","version":"3.18.0","purl":"pkg:pypi/filelock","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"identify","version":"2.6.12","purl":"pkg:pypi/identify","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"iniconfig","version":"2.1.0","purl":"pkg:pypi/iniconfig","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"ipdb","version":"0.13.13","purl":"pkg:pypi/ipdb","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"ipython","version":"8.18.1","purl":"pkg:pypi/ipython","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"jedi","version":"0.19.2","purl":"pkg:pypi/jedi","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"line-profiler","version":"4.2.0","purl":"pkg:pypi/line-profiler","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"matplotlib-inline","version":"0.1.7","purl":"pkg:pypi/matplotlib-inline","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"nodeenv","version":"1.9.1","purl":"pkg:pypi/nodeenv","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"packaging","version":"25.0","purl":"pkg:pypi/packaging","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"parso","version":"0.8.4","purl":"pkg:pypi/parso","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"pexpect","version":"4.9.0","purl":"pkg:pypi/pexpect","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"platformdirs","version":"4.3.8","purl":"pkg:pypi/platformdirs","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"pluggy","version":"1.6.0","purl":"pkg:pypi/pluggy","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"pre-commit","version":"4.2.0","purl":"pkg:pypi/pre-commit","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"prompt-toolkit","version":"3.0.51","purl":"pkg:pypi/prompt-toolkit","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"ptyprocess","version":"0.7.0","purl":"pkg:pypi/ptyprocess","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"pure-eval","version":"0.2.3","purl":"pkg:pypi/pure-eval","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"pygments","version":"2.19.2","purl":"pkg:pypi/pygments","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"pytest","version":"8.4.1","purl":"pkg:pypi/pytest","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"pytest-cov","version":"6.2.1","purl":"pkg:pypi/pytest-cov","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"pytest-mock","version":"3.14.1","purl":"pkg:pypi/pytest-mock","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"pyyaml","version":"6.0.2","purl":"pkg:pypi/pyyaml","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"stack-data","version":"0.6.3","purl":"pkg:pypi/stack-data","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"tomli","version":"2.2.1","purl":"pkg:pypi/tomli","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"traitlets","version":"5.14.3","purl":"pkg:pypi/traitlets","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"typing-extensions","version":"4.14.1","purl":"pkg:pypi/typing-extensions","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"virtualenv","version":"20.31.2","purl":"pkg:pypi/virtualenv","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"wcwidth","version":"0.2.13","purl":"pkg:pypi/wcwidth","properties":[{"name":"filePath","value":"poetry.lock"}]},{"type":"library","name":"python","version":"^3.9","purl":"pkg:pypi/python","properties":[{"name":"filePath","value":"pyproject.toml"}]},{"type":"library","name":"attrs","version":"\u003e=21.3.0","purl":"pkg:pypi/attrs","properties":[{"name":"filePath","value":"pyproject.toml"}]},{"type":"library","name":"cython","version":"\u003e=1.0.0","purl":"pkg:pypi/cython","properties":[{"name":"filePath","value":"pyproject.toml"}]},{"type":"library","name":"coverage","version":"\u003e=5.1","purl":"pkg:pypi/coverage","properties":[{"name":"filePath","value":"pyproject.toml"}]},{"type":"library","name":"pre_commit","version":"\u003e=2.16.0","purl":"pkg:pypi/pre_commit","properties":[{"name":"filePath","value":"pyproject.toml"}]},{"type":"library","name":"pytest","version":"\u003e=7.1.2","purl":"pkg:pypi/pytest","properties":[{"name":"filePath","value":"pyproject.toml"}]},{"type":"library","name":"pytest-cov","version":"\u003e=3.0.0","purl":"pkg:pypi/pytest-cov","properties":[{"name":"filePath","value":"pyproject.toml"}]},{"type":"library","name":"pytest-mock","version":"\u003e=3.7.0","purl":"pkg:pypi/pytest-mock","properties":[{"name":"filePath","value":"pyproject.toml"}]},{"type":"library","name":"ipdb","version":"\u003e=0.13.9","purl":"pkg:pypi/ipdb","properties":[{"name":"filePath","value":"pyproject.toml"}]},{"type":"library","name":"line_profiler","version":"\u003e=3.5.1","purl":"pkg:pypi/line_profiler","properties":[{"name":"filePath","value":"pyproject.toml"}]}]}