{"bomFormat":"CycloneDX","specVersion":"1.5","version":1,"serialNumber":"urn:uuid:4c7a1a12-6ff5-4ee7-ba00-1824bc33f482","metadata":{"timestamp":"2026-04-18T00:53:22Z","tools":[{"vendor":"Ecosystems","name":"Ecosystems SBOM Generator"}],"component":{"type":"application","name":"python-validators/validators"}},"components":[{"type":"library","name":"actions/checkout","version":"v3","purl":"pkg:githubactions/actions/checkout","properties":[{"name":"filePath","value":".github/workflows/docs.yaml"}]},{"type":"library","name":"actions/setup-python","version":"v4","purl":"pkg:githubactions/actions/setup-python","properties":[{"name":"filePath","value":".github/workflows/docs.yaml"}]},{"type":"library","name":"actions/configure-pages","version":"v3","purl":"pkg:githubactions/actions/configure-pages","properties":[{"name":"filePath","value":".github/workflows/docs.yaml"}]},{"type":"library","name":"actions/upload-pages-artifact","version":"v1","purl":"pkg:githubactions/actions/upload-pages-artifact","properties":[{"name":"filePath","value":".github/workflows/docs.yaml"}]},{"type":"library","name":"actions/deploy-pages","version":"v2","purl":"pkg:githubactions/actions/deploy-pages","properties":[{"name":"filePath","value":".github/workflows/docs.yaml"}]},{"type":"library","name":"actions/checkout","version":"v3","purl":"pkg:githubactions/actions/checkout","properties":[{"name":"filePath","value":".github/workflows/package.yaml"}]},{"type":"library","name":"actions/setup-python","version":"v4","purl":"pkg:githubactions/actions/setup-python","properties":[{"name":"filePath","value":".github/workflows/package.yaml"}]},{"type":"library","name":"actions/upload-pages-artifact","version":"v1","purl":"pkg:githubactions/actions/upload-pages-artifact","properties":[{"name":"filePath","value":".github/workflows/package.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/package.yaml"}]},{"type":"library","name":"actions/checkout","version":"v3","purl":"pkg:githubactions/actions/checkout","properties":[{"name":"filePath","value":".github/workflows/pycqa.yaml"}]},{"type":"library","name":"actions/setup-python","version":"v4","purl":"pkg:githubactions/actions/setup-python","properties":[{"name":"filePath","value":".github/workflows/pycqa.yaml"}]},{"type":"library","name":"actions/checkout","version":"v2","purl":"pkg:githubactions/actions/checkout","properties":[{"name":"filePath","value":".github/workflows/sast.yaml"}]},{"type":"library","name":"mdegis/bandit-action","version":"85fcc340c3b0bf5d86029abb49b9aac916d807b2","purl":"pkg:githubactions/mdegis/bandit-action","properties":[{"name":"filePath","value":".github/workflows/sast.yaml"}]},{"type":"library","name":"babel","version":"==2.13.0","purl":"pkg:pypi/babel","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"certifi","version":"==2023.7.22","purl":"pkg:pypi/certifi","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"charset-normalizer","version":"==3.3.0","purl":"pkg:pypi/charset-normalizer","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"click","version":"==8.1.7","purl":"pkg:pypi/click","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"colorama","version":"==0.4.6","purl":"pkg:pypi/colorama","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"ghp-import","version":"==2.1.0","purl":"pkg:pypi/ghp-import","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"gitdb","version":"==4.0.10","purl":"pkg:pypi/gitdb","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"GitPython","version":"==3.1.37","purl":"pkg:pypi/GitPython","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"griffe","version":"==0.36.4","purl":"pkg:pypi/griffe","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"idna","version":"==3.4","purl":"pkg:pypi/idna","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"importlib-metadata","version":"==6.8.0","purl":"pkg:pypi/importlib-metadata","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"jinja2","version":"==3.1.2","purl":"pkg:pypi/jinja2","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"markdown","version":"==3.4.4","purl":"pkg:pypi/markdown","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"markupsafe","version":"==2.1.3","purl":"pkg:pypi/markupsafe","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"mergedeep","version":"==1.3.4","purl":"pkg:pypi/mergedeep","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"mkdocs","version":"==1.5.3","purl":"pkg:pypi/mkdocs","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"mkdocs-autorefs","version":"==0.5.0","purl":"pkg:pypi/mkdocs-autorefs","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"mkdocs-git-revision-date-localized-plugin","version":"==1.2.0","purl":"pkg:pypi/mkdocs-git-revision-date-localized-plugin","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"mkdocs-material","version":"==9.4.3","purl":"pkg:pypi/mkdocs-material","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"mkdocs-material-extensions","version":"==1.2","purl":"pkg:pypi/mkdocs-material-extensions","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"mkdocstrings","version":"==0.23.0","purl":"pkg:pypi/mkdocstrings","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"mkdocstrings-python","version":"==1.7.1","purl":"pkg:pypi/mkdocstrings-python","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"packaging","version":"==23.2","purl":"pkg:pypi/packaging","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"paginate","version":"==0.5.6","purl":"pkg:pypi/paginate","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"pathspec","version":"==0.11.2","purl":"pkg:pypi/pathspec","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"platformdirs","version":"==3.11.0","purl":"pkg:pypi/platformdirs","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"pyaml","version":"==23.9.7","purl":"pkg:pypi/pyaml","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"pygments","version":"==2.16.1","purl":"pkg:pypi/pygments","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"pymdown-extensions","version":"==10.3","purl":"pkg:pypi/pymdown-extensions","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"python-dateutil","version":"==2.8.2","purl":"pkg:pypi/python-dateutil","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"pytz","version":"==2023.3.post1","purl":"pkg:pypi/pytz","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"pyyaml","version":"==6.0.1","purl":"pkg:pypi/pyyaml","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"pyyaml-env-tag","version":"==0.1","purl":"pkg:pypi/pyyaml-env-tag","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"regex","version":"==2023.8.8","purl":"pkg:pypi/regex","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"requests","version":"==2.31.0","purl":"pkg:pypi/requests","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"six","version":"==1.16.0","purl":"pkg:pypi/six","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"smmap","version":"==5.0.1","purl":"pkg:pypi/smmap","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"typing-extensions","version":"==4.8.0","purl":"pkg:pypi/typing-extensions","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"urllib3","version":"==2.0.7","purl":"pkg:pypi/urllib3","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"watchdog","version":"==3.0.0","purl":"pkg:pypi/watchdog","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"zipp","version":"==3.17.0","purl":"pkg:pypi/zipp","properties":[{"name":"filePath","value":"package/requirements.mkdocs.txt"}]},{"type":"library","name":"alabaster","version":"==0.7.13","purl":"pkg:pypi/alabaster","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"babel","version":"==2.13.0","purl":"pkg:pypi/babel","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"certifi","version":"==2023.7.22","purl":"pkg:pypi/certifi","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"charset-normalizer","version":"==3.3.0","purl":"pkg:pypi/charset-normalizer","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"docutils","version":"==0.20.1","purl":"pkg:pypi/docutils","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"idna","version":"==3.4","purl":"pkg:pypi/idna","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"imagesize","version":"==1.4.1","purl":"pkg:pypi/imagesize","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"importlib-metadata","version":"==6.8.0","purl":"pkg:pypi/importlib-metadata","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"Jinja2","version":"==3.1.2","purl":"pkg:pypi/Jinja2","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"markdown-it-py","version":"==3.0.0","purl":"pkg:pypi/markdown-it-py","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"MarkupSafe","version":"==2.1.3","purl":"pkg:pypi/MarkupSafe","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"mdit-py-plugins","version":"==0.4.0","purl":"pkg:pypi/mdit-py-plugins","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"mdurl","version":"==0.1.2","purl":"pkg:pypi/mdurl","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"myst-parser","version":"==2.0.0","purl":"pkg:pypi/myst-parser","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"packaging","version":"==23.2","purl":"pkg:pypi/packaging","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"Pygments","version":"==2.16.1","purl":"pkg:pypi/Pygments","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"pypandoc-binary","version":"==1.11","purl":"pkg:pypi/pypandoc-binary","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"pytz","version":"==2023.3.post1","purl":"pkg:pypi/pytz","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"pyyaml","version":"==6.0.1","purl":"pkg:pypi/pyyaml","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"requests","version":"==2.31.0","purl":"pkg:pypi/requests","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"snowballstemmer","version":"==2.2.0","purl":"pkg:pypi/snowballstemmer","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"sphinx","version":"==7.1.2","purl":"pkg:pypi/sphinx","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"sphinxcontrib-applehelp","version":"==1.0.4","purl":"pkg:pypi/sphinxcontrib-applehelp","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"sphinxcontrib-devhelp","version":"==1.0.2","purl":"pkg:pypi/sphinxcontrib-devhelp","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"sphinxcontrib-htmlhelp","version":"==2.0.1","purl":"pkg:pypi/sphinxcontrib-htmlhelp","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"sphinxcontrib-jsmath","version":"==1.0.1","purl":"pkg:pypi/sphinxcontrib-jsmath","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"sphinxcontrib-qthelp","version":"==1.0.3","purl":"pkg:pypi/sphinxcontrib-qthelp","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"sphinxcontrib-serializinghtml","version":"==1.1.5","purl":"pkg:pypi/sphinxcontrib-serializinghtml","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"urllib3","version":"==2.0.7","purl":"pkg:pypi/urllib3","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"zipp","version":"==3.17.0","purl":"pkg:pypi/zipp","properties":[{"name":"filePath","value":"package/requirements.sphinx.txt"}]},{"type":"library","name":"black","version":"==23.9.1","purl":"pkg:pypi/black","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"click","version":"==8.1.7","purl":"pkg:pypi/click","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"exceptiongroup","version":"==1.1.3","purl":"pkg:pypi/exceptiongroup","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"iniconfig","version":"==2.0.0","purl":"pkg:pypi/iniconfig","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"mypy-extensions","version":"==1.0.0","purl":"pkg:pypi/mypy-extensions","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"nodeenv","version":"==1.8.0","purl":"pkg:pypi/nodeenv","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"packaging","version":"==23.2","purl":"pkg:pypi/packaging","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"pathspec","version":"==0.11.2","purl":"pkg:pypi/pathspec","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"platformdirs","version":"==3.11.0","purl":"pkg:pypi/platformdirs","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"pluggy","version":"==1.3.0","purl":"pkg:pypi/pluggy","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"pyaml","version":"==23.9.7","purl":"pkg:pypi/pyaml","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"pypandoc-binary","version":"==1.11","purl":"pkg:pypi/pypandoc-binary","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"pyright","version":"==1.1.329","purl":"pkg:pypi/pyright","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"pytest","version":"==7.4.2","purl":"pkg:pypi/pytest","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"PyYAML","version":"==6.0.1","purl":"pkg:pypi/PyYAML","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"ruff","version":"==0.0.292","purl":"pkg:pypi/ruff","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"setuptools","version":"==68.2.2","purl":"pkg:pypi/setuptools","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"tomli","version":"==2.0.1","purl":"pkg:pypi/tomli","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]},{"type":"library","name":"typing-extensions","version":"==4.8.0","purl":"pkg:pypi/typing-extensions","properties":[{"name":"filePath","value":"package/requirements.tooling.txt"}]}]}