Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-26 23:06 UTC

mmschlk / shapiq

Shapley Interactions and Shapley Values for Machine Learning

Python · C++MIT★ 762 stars⑂ 68 forkssince Oct 2023View on GitHub ↗

mmschlk/shapiq holds a health index of 78 out of 100, placing it in the Good band. It scores highest on Engineering Quality (94/100) and lowest on Security (64/100). It was last updated 2 days ago. A single contributor accounts for most of its recent work.

78
overall / 100
Good

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

78
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

MaximilianPersonal account
55 followers11 public repossince Nov 2018AIML@LMU

This repository is owned by a personal account. A single-owner project carries more continuity risk than an organization-backed one.

Package ecosystems

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

88Excellent · 22% of overall
How it's scored
36/36Push recency — last push 2 days ago
22.2/36Commit cadence — 32/52 weeks with commits
18/18Commit volume — 158 commits in the last year
10/10OpenSSF Scorecard: Maintained — 24 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year158
human_commit_share0.87
days_since_last_push2
active_weeks_last_year32
How it's scored
27/27Ships releases — 22 releases published
36/36Release recency — latest release 20 days ago
19.8/27Release cadence — a release every ~52.1 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count22
latest_release_tagv1.6.0
releases_from_tagsno
days_since_latest_release20
mean_days_between_releases52.1
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

79Good · 18% of overall
How it's scored
46.7/60Stars — 762 stars
15.2/25Forks — 68 forks
5.3/15Watchers — 10 watchers
Inputs used
forks68
stars762
watchers10
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

Community health

92Excellent
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (MIT)
18/18CONTRIBUTING guide
13.5/13.5Code of conduct
0/7.2Issue template
6.3/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingyes
has_issue_templateno
has_code_of_conductyes
has_pull_request_templateyes

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

66Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
6.6/22.5Commit distribution — top contributor authored 70% of commits
13.5/13.5Contributor breadth — 24 contributors
10/10OpenSSF Scorecard: Contributors — project has 10 contributing companies or organizations
Inputs used
bus_factor1
contributors_sampled24
top_contributor_share0.705
How it's scored
42.2/46.8Issue resolution — 90% of issues closed
32/38.3PR acceptance — 252/301 decided PRs merged
10.5/15OpenSSF Scorecard: Code-Review — Found 20/26 approved changesets -- score normalized to 7
Inputs used
merged_prs252
open_issues24
closed_issues224
issue_closed_ratio0.903
closed_unmerged_prs49
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
12.6/25Owner reach — 55 followers of mmschlk
19.9/25Track record — 11 public repos, account ~7 yr old
Inputs used
followers55
owner_typeUser
is_verified
owner_loginmmschlk
public_repos11
account_age_days2,809
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.
How it's scored
25/25Published & resolvable — 1 package(s) on pypi
35/35Publish recency — latest publish 20 days ago
20/20Version history — 23 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesshapiq
ecosystemspypi
any_deprecatedno
min_days_since_publish20

Engineering Quality

Are baseline engineering and documentation practices in place?

94Excellent · 20% of overall
How it's scored
24/24CI workflows — 3 workflow(s)
24/24Tests present
16/16Linter config
9.6/9.6Pre-commit hooks
0/6.4.editorconfig
16/20OpenSSF Scorecard: CI-Tests — 22 out of 27 merged PRs checked by a CI test -- score normalized to 8
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configyes
has_precommit_configyes

Documentation

100Excellent
How it's scored
30/30README
25/25Documentation directory
15/15Documentation / homepage site — https://shapiq.readthedocs.io
10/10Repository description
10/10Topics — 15 topics
10/10Wiki
Inputs used
topicspython, feature-interactions, explainability, interpretability, machine-learning, shap, shapley, shapiq, shapley-interactions, banzhaf-index, explainable-ai, feature-importance, game-theory, interpretable-machine-learning, feature-attribution
has_wikiyes
homepagehttps://shapiq.readthedocs.io
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

64Moderate · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
3.8/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2/2.5CI-Tests — 22 out of 27 merged PRs checked by a CI test -- score normalized to 8
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
5.2/7.5Code-Review — Found 20/26 approved changesets -- score normalized to 7
2.5/2.5Contributors — project has 10 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — license file detected
7.5/7.5Maintained — 24 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 77 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5.5
Excluded from scoring (no data or not applicable): signed_releases. Remaining weights renormalized.
How it's scored
35/35Direct dependencies free of known advisories — no direct dependency carries a known advisory
25/25Indirect dependencies free of known advisories — no indirect dependency carries a known advisory
0/40No advisories left outstanding — no advisory carries a publication date
Inputs used
sourceosv
advisories0
affected_packages0
assessed_packages25
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the pypi:shapiq@1.6.0 runtime dependency closure — what installing the published package pulls in — 25 packages. Reachability is not analyzed.

AI Readiness

How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score.

78Good · 0% of overall
How it's scored
45/45Agent instructions — AGENTS.md, CLAUDE.md
0/15Machine-readable docs (llms.txt)
32.5/40Legible commit history — 53 of 87 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.609
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes937
How it's scored
18/18One-command bootstrap — docs/Makefile
22/22Automated tests
11/11Lint / format config
11/11Static type checking — src/shapiq/py.typed
10/10Reproducible environment — lockfile
10/10Demonstrated agent practice — 12 of the last 100 commits agent-authored or agent-credited
8/8Automated maintenance — 13 of the last 100 commits are automated dependency updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsyes
lockfilesuv.lock
has_dockerfileno
typed_languageno
bootstrap_filesdocs/Makefile
has_devcontainerno
has_linter_configyes
typecheck_configssrc/shapiq/py.typed
agent_commit_share0.12
toolchain_manifests
dependency_bot_commit_share0.13
How it's scored
27/45Type-checkable code — Python with type-check config (src/shapiq/py.typed)
54.7/55Manageable file sizes — 2/361 source files over 60KB
Inputs used
primary_languagePython
largest_source_bytes96,625
source_files_sampled361
oversized_source_files2
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
0/20MCP server
40/40Runnable examples — examples
Inputs used
example_dirsexamples
has_mcp_signalno
api_schema_files

Key facts

762GitHub stars
24contributors
158commits, last 12 months
2days since last push
22releases
1bus factor
24open issues
PyPIpackage ecosystems

Data collection warnings

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

More detail

Star and fork history 0 ★ / 68 ⇿
0Stars
68Forks
19Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

01325385063756662024-022025-052026-07
Major 1Minor 6Patch 9

Each point covers 3 days.

OpenSSF Scorecard 5.5 / 10
5.5aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-26 23:06 UTC

10Binary-Artifactsno binaries found in the repo
5Branch-Protectionbranch protection is not maximal on development and all release branches
8CI-Tests22 out of 27 merged PRs checked by a CI test -- score normalized to 8
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
7Code-ReviewFound 20/26 approved changesets -- score normalized to 7
10Contributorsproject has 10 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained24 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities77 existing vulnerabilities detected
Direct dependencies 11
RegistryPackageVersion constraintManifest
PyPInumpypyproject.toml
PyPIscipypyproject.toml
PyPIpandaspyproject.toml
PyPIjoblibpyproject.toml
PyPIscikit-learnpyproject.toml
PyPItqdmpyproject.toml
PyPIrequestspyproject.toml
PyPImatplotlibpyproject.toml
PyPInetworkxpyproject.toml
PyPIcolourpyproject.toml
PyPIpillowpyproject.toml
All dependencies 270

Full resolved dependency set from the GitHub dependency graph: 11 direct and 259 indirect (transitive) packages. The transitive closure is complete when the repository commits a lockfile.

RegistryPackageVersionRelation
PyPIcolour0.1.5direct
PyPIjoblib1.5.3direct
PyPImatplotlib3.10.8direct
PyPInetworkx3.6.1direct
PyPInumpy2.4.3direct
PyPIpandas3.0.1direct
PyPIpillow12.1.1direct
PyPIrequests2.32.5direct
PyPIscikit-learn1.8.0direct
PyPIscipy1.17.1direct
PyPItqdm4.67.3direct
PyPIabsl-py2.4.0indirect
PyPIaccessible-pygments0.0.5indirect
PyPIalabaster1.0.0indirect
PyPIalembic1.18.5indirect
PyPIannotated-doc0.0.4indirect
PyPIannotated-types0.7.0indirect
PyPIanyio4.12.1indirect
PyPIappnope0.1.4indirect
PyPIargon2-cffi25.1.0indirect
PyPIargon2-cffi-bindings25.1.0indirect
PyPIarrow1.4.0indirect
PyPIasttokens3.0.1indirect
PyPIastunparse1.6.3indirect
PyPIasync-lru2.2.0indirect
PyPIattrs25.4.0indirect
PyPIbabel2.18.0indirect
PyPIbackoff2.2.1indirect
PyPIbeautifulsoup44.14.3indirect
PyPIbleach6.3.0indirect
PyPIbotorch0.14.0indirect
PyPIcatboost1.2.10indirect
PyPIcertifi2026.2.25indirect
PyPIcffi2.0.0indirect
PyPIcfgv3.5.0indirect
PyPIcharset-normalizer3.4.5indirect
PyPIclick8.3.1indirect
PyPIcloudpickle3.1.2indirect
PyPIcolorama0.4.6indirect
PyPIcolorlog6.10.1indirect
PyPIcomm0.2.3indirect
PyPIconfigspace1.2.2indirect
PyPIcontourpy1.3.3indirect
PyPIcoverage7.13.4indirect
PyPIcycler0.12.1indirect
PyPIdask2026.3.0indirect
PyPIdask-jobqueue0.9.0indirect
PyPIdebugpy1.8.20indirect
PyPIdecorator5.2.1indirect
PyPIdefusedxml0.7.1indirect
PyPIdistlib0.4.0indirect
PyPIdistributed2026.3.0indirect
PyPIdistro1.9.0indirect
PyPIdocutils0.22.4indirect
PyPIeinops0.8.2indirect
PyPIemcee3.1.6indirect
PyPIeval-type-backport0.3.1indirect
PyPIexecnet2.1.2indirect
PyPIexecuting2.2.1indirect
PyPIfastjsonschema2.21.2indirect
PyPIfilelock3.25.2indirect
PyPIflatbuffers25.12.19indirect
PyPIfonttools4.62.0indirect
PyPIfqdn1.5.1indirect
PyPIfsspec2026.2.0indirect
PyPIfuro2025.12.19indirect
PyPIgalois0.4.10indirect
PyPIgast0.7.0indirect
PyPIgoogle-pasta0.2.0indirect
PyPIgpytorch1.14indirect
PyPIgraphviz0.21indirect
PyPIgreenlet3.5.3indirect
PyPIgrpcio1.78.0indirect
PyPIh110.16.0indirect
PyPIh5py3.14.0indirect
PyPIhf-xet1.4.0indirect
PyPIhttpcore1.0.9indirect
PyPIhttpx0.28.1indirect
PyPIhuggingface-hub1.6.0indirect
PyPIidentify2.6.17indirect
PyPIidna3.11indirect
PyPIimageio2.37.3indirect
PyPIimagesize2.0.0indirect
PyPIiniconfig2.3.0indirect
PyPIipykernel7.2.0indirect
PyPIipython9.11.0indirect
PyPIipython-pygments-lexers1.1.1indirect
PyPIipywidgets8.1.8indirect
PyPIisoduration20.11.0indirect
PyPIjaxtyping0.3.11indirect
PyPIjedi0.19.2indirect
PyPIjinja23.1.6indirect
PyPIjson50.13.0indirect
PyPIjsonpointer3.0.0indirect
PyPIjsonschema4.26.0indirect
PyPIjsonschema-specifications2025.9.1indirect
PyPIjupyter-client8.8.0indirect
PyPIjupyter-core5.9.1indirect
PyPIjupyter-events0.12.0indirect
PyPIjupyter-lsp2.3.0indirect
PyPIjupyter-server2.17.0indirect
PyPIjupyter-server-terminals0.5.4indirect
PyPIjupyterlab4.5.6indirect
PyPIjupyterlab-pygments0.3.0indirect
PyPIjupyterlab-server2.28.0indirect
PyPIjupyterlab-widgets3.0.16indirect
PyPIkeras3.13.2indirect
PyPIkiwisolver1.5.0indirect
PyPIlark1.3.1indirect
PyPIlatexcodec3.0.1indirect
PyPIlazy-loader0.5indirect
PyPIlibclang18.1.1indirect
PyPIlightgbm4.6.0indirect
PyPIlinear-operator0.6indirect
PyPIllvmlite0.46.0indirect
PyPIlocket1.0.0indirect
PyPImako1.3.12indirect
PyPImarkdown-it-py4.0.0indirect
PyPImarkupsafe3.0.3indirect
PyPImatplotlib-inline0.2.1indirect
PyPImdit-py-plugins0.5.0indirect
PyPImdurl0.1.2indirect
PyPImistune3.2.0indirect
PyPIml-dtypes0.5.4indirect
PyPImore-itertools11.1.0indirect
PyPImpmath1.3.0indirect
PyPImsgpack1.2.0indirect
PyPImultipledispatch1.0.0indirect
PyPImypy-extensions1.1.0indirect
PyPImyst-parser5.0.0indirect
PyPInamex0.1.0indirect
PyPInarwhals2.21.0indirect
PyPInbclient0.10.4indirect
PyPInbconvert7.17.0indirect
PyPInbformat5.10.4indirect
PyPInest-asyncio1.6.0indirect
PyPInodeenv1.10.0indirect
PyPInotebook7.5.5indirect
PyPInotebook-shim0.2.4indirect
PyPInumba0.64.0indirect
PyPInvidia-cublas-cu1212.8.4.1indirect
PyPInvidia-cuda-cupti-cu1212.8.90indirect
PyPInvidia-cuda-nvrtc-cu1212.8.93indirect
PyPInvidia-cuda-runtime-cu1212.8.90indirect
PyPInvidia-cudnn-cu129.10.2.21indirect
PyPInvidia-cufft-cu1211.3.3.83indirect
PyPInvidia-cufile-cu121.13.1.3indirect
PyPInvidia-curand-cu1210.3.9.90indirect
PyPInvidia-cusolver-cu1211.7.3.90indirect
PyPInvidia-cusparse-cu1212.5.8.93indirect
PyPInvidia-cusparselt-cu120.7.1indirect
PyPInvidia-ml-py13.590.48indirect
PyPInvidia-nccl-cu122.27.5indirect
PyPInvidia-nvjitlink-cu1212.8.93indirect
PyPInvidia-nvshmem-cu123.3.20indirect
PyPInvidia-nvtx-cu1212.8.90indirect
PyPIopt-einsum3.4.0indirect
PyPIoptree0.19.0indirect
PyPIoptuna4.9.0indirect
PyPIpackaging26.0indirect
PyPIpandocfilters1.5.1indirect
PyPIparso0.8.6indirect
PyPIpartd1.4.2indirect
PyPIpexpect4.9.0indirect
PyPIplatformdirs4.9.4indirect
PyPIplotly6.7.0indirect
PyPIpluggy1.6.0indirect
PyPIposthog7.9.12indirect
PyPIpre-commit4.5.1indirect
PyPIprometheus-client0.24.1indirect
PyPIprompt-toolkit3.0.52indirect
PyPIprotobuf7.34.0indirect
PyPIpsutil7.2.2indirect
PyPIptyprocess0.7.0indirect
PyPIpure-eval0.2.3indirect
PyPIpybtex0.25.1indirect
PyPIpybtex-docutils1.0.3indirect
PyPIpycparser3.0indirect
PyPIpydantic2.12.5indirect
PyPIpydantic-core2.41.5indirect
PyPIpydantic-settings2.13.1indirect
PyPIpygments2.19.2indirect
PyPIpynisher1.0.10indirect
PyPIpyparsing3.3.2indirect
PyPIpyre-extensions0.0.32indirect
PyPIpyro-api0.1.2indirect
PyPIpyro-ppl1.9.1indirect
PyPIpytest9.0.2indirect
PyPIpytest-cov7.0.0indirect
PyPIpytest-xdist3.8.0indirect
PyPIpython-dateutil2.9.0.post0indirect
PyPIpython-discovery1.1.3indirect
PyPIpython-dotenv1.2.2indirect
PyPIpython-json-logger4.0.0indirect
PyPIpywin32312indirect
PyPIpywinpty3.0.3indirect
PyPIpyyaml6.0.3indirect
PyPIpyzmq27.1.0indirect
PyPIreferencing0.37.0indirect
PyPIregex2026.2.28indirect
PyPIrfc3339-validator0.1.4indirect
PyPIrfc3986-validator0.1.1indirect
PyPIrfc3987-syntax1.1.0indirect
PyPIrich14.3.3indirect
PyPIroman-numerals4.1.0indirect
PyPIrpds-py0.30.0indirect
PyPIruff0.15.5indirect
PyPIsafetensors0.7.0indirect
PyPIscikit-image0.26.0indirect
PyPIsend2trash2.1.0indirect
PyPIsetuptools82.0.1indirect
PyPIshellingham1.5.4indirect
PyPIsix1.17.0indirect
PyPIsmac2.4.0indirect
PyPIsnowballstemmer3.0.1indirect
PyPIsortedcontainers2.4.0indirect
PyPIsoupsieve2.8.3indirect
PyPIsparse-transform0.2.1indirect
PyPIsphinx9.1.0indirect
PyPIsphinx-autodoc-typehints3.9.8indirect
PyPIsphinx-basic-ng1.0.0b2indirect
PyPIsphinx-copybutton0.5.2indirect
PyPIsphinx-gallery0.20.0indirect
PyPIsphinxcontrib-applehelp2.0.0indirect
PyPIsphinxcontrib-bibtex2.6.5indirect
PyPIsphinxcontrib-devhelp2.0.0indirect
PyPIsphinxcontrib-htmlhelp2.1.0indirect
PyPIsphinxcontrib-jsmath1.0.1indirect
PyPIsphinxcontrib-qthelp2.0.0indirect
PyPIsphinxcontrib-serializinghtml2.0.0indirect
PyPIsqlalchemy2.0.51indirect
PyPIstack-data0.6.3indirect
PyPIsympy1.14.0indirect
PyPItabpfn6.4.1indirect
PyPItabpfn-common-utils0.2.18indirect
PyPItblib3.2.2indirect
PyPItensorflow2.21.0indirect
PyPItermcolor3.3.0indirect
PyPIterminado0.18.1indirect
PyPItf-keras2.15.0indirect
PyPIthreadpoolctl3.6.0indirect
PyPItifffile2026.3.3indirect
PyPItinycss21.4.0indirect
PyPItokenizers0.22.2indirect
PyPItoolz1.1.0indirect
PyPItorch2.9.1indirect
PyPItorchvision0.24.1indirect
PyPItornado6.5.5indirect
PyPItraitlets5.14.3indirect
PyPItransformers5.3.0indirect
PyPItriton3.5.1indirect
PyPIty0.0.21indirect
PyPItyper0.24.1indirect
PyPItyping-extensions4.15.0indirect
PyPItyping-inspect0.9.0indirect
PyPItyping-inspection0.4.2indirect
PyPItzdata2025.3indirect
PyPIuri-template1.3.0indirect
PyPIurllib32.6.3indirect
PyPIvirtualenv21.2.0indirect
PyPIwadler-lindig0.1.7indirect
PyPIwcwidth0.6.0indirect
PyPIwebcolors25.10.0indirect
PyPIwebencodings0.5.1indirect
PyPIwebsocket-client1.9.0indirect
PyPIwheel0.46.3indirect
PyPIwidgetsnbextension4.0.15indirect
PyPIwrapt2.1.2indirect
PyPIxgboost3.2.0indirect
PyPIzict3.0.0indirect
Dependency advisories 0

Installing pypi:shapiq@1.6.0 pulls in 25 packages, direct and transitive: 0 carry known advisories, of which 0 are direct dependencies.

No known advisories affect the assessed dependencies.

An advisory means the version recorded in the dependency graph falls inside an advisory’s affected range. Reachability is not analysed, and the graph includes development and test pins — a finding may concern tooling rather than shipped software.

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [
        "python",
        "feature-interactions",
        "explainability",
        "interpretability",
        "machine-learning",
        "shap",
        "shapley",
        "shapiq",
        "shapley-interactions",
        "banzhaf-index",
        "explainable-ai",
        "feature-importance",
        "game-theory",
        "interpretable-machine-learning",
        "feature-attribution"
      ],
      "is_fork": false,
      "size_kb": 364201,
      "has_wiki": true,
      "homepage": "https://shapiq.readthedocs.io",
      "languages": {
        "C++": 274313,
        "Shell": 3045,
        "Python": 2091517
      },
      "pushed_at": "2026-07-24T20:12:29Z",
      "created_at": "2023-10-17T14:44:07Z",
      "owner_type": "User",
      "updated_at": "2026-07-25T16:09:44Z",
      "description": "Shapley Interactions and Shapley Values for Machine Learning",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Python",
      "significant_languages": [
        "Python",
        "C++"
      ]
    },
    "owner": {
      "blog": "https://maxmuschalik.com/",
      "name": "Maximilian",
      "type": "User",
      "login": "mmschlk",
      "company": "AIML@LMU",
      "location": "Germany",
      "followers": 55,
      "avatar_url": "https://avatars.githubusercontent.com/u/45100845?v=4",
      "created_at": "2018-11-16T14:19:51Z",
      "is_verified": null,
      "public_repos": 11,
      "account_age_days": 2809
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-07-06T08:11:37Z"
        },
        {
          "tag": "v1.5.2",
          "kind": "patch",
          "published_at": "2026-06-12T21:44:42Z"
        },
        {
          "tag": "v1.5.1",
          "kind": "patch",
          "published_at": "2026-05-30T16:56:28Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-05-29T10:16:32Z"
        },
        {
          "tag": "v1.4.1",
          "kind": "patch",
          "published_at": "2025-11-10T19:41:25Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2025-10-31T10:07:42Z"
        },
        {
          "tag": "v1.3.2",
          "kind": "patch",
          "published_at": "2025-10-14T11:16:48Z"
        },
        {
          "tag": "v1.3.1",
          "kind": "patch",
          "published_at": "2025-07-11T15:58:50Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2025-06-17T08:59:59Z"
        },
        {
          "tag": "v.1.2.3",
          "kind": "other",
          "published_at": "2025-03-24T18:07:09Z"
        },
        {
          "tag": "v1.2.2",
          "kind": "patch",
          "published_at": "2025-03-11T13:32:50Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2025-02-17T22:14:37Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2025-01-15T07:41:29Z"
        },
        {
          "tag": "v1.1.1",
          "kind": "patch",
          "published_at": "2024-11-13T11:35:34Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2024-11-08T09:44:52Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2024-06-05T13:42:37Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2024-06-04T14:30:39Z"
        },
        {
          "tag": "v.0.0.6-alpha",
          "kind": "other",
          "published_at": "2024-03-20T15:37:48Z"
        },
        {
          "tag": "v.0.0.5-alpha",
          "kind": "other",
          "published_at": "2024-03-18T14:23:51Z"
        },
        {
          "tag": "v.0.0.4-alpha",
          "kind": "other",
          "published_at": "2023-11-29T16:27:39Z"
        },
        {
          "tag": "v0.0.3-alpha",
          "kind": "prerelease",
          "published_at": "2023-11-17T20:05:03Z"
        },
        {
          "tag": "v0.0.2-alpha",
          "kind": "prerelease",
          "published_at": "2023-10-23T09:39:53Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "12ec2878fb61b94c01a8c1260a18108eac165538",
          "body": "Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.14.0 to 1.14.1.\n- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)\n- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.14.0...v1.14.1)\n\n---\nupdated-dependencies:\n- dep\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.1 (#568)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-21T14:14:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a063be3056a480333281b13998d36107a4527329",
          "body": "* Prepare v1.6.0 changelog (2026-07-06)\n\nTurn the Unreleased section into the dated v1.6.0 release entry. The two\nheadline features are the OddSHAP (#522) and ShaplEIG (#548) approximators,\neach with a dedicated \"Introducing\" subsection and preprint link. Also\ndocuments the new shapiq_benchmark pack\n[…]\nach, and drop\na couple of redundant test comments. No behavior change.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Maximilian Muschalik <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Prepare v1.6.0 changelog (2026-07-06) (#563)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-07-06T07:49:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "32ecc577f85d61b6c716fcb91b48d77d9755f4b4",
          "body": "* expanded regression support to individuals. Minimum budget for OddSHAP is now interaction_factor compared with previous interaction_factor*n\n\n* improved documentation\n\n* fix CI: remove unused import and fix docstring RST errors\n\n- Remove unused `scipy.linalg` import (ruff F401) that failed the\n  c\n[…]\nproximate() actually uses,\n  checking w(S) == w(S^c) for sampled complementary pairs and paired-vs-unpaired\n  lstsq equivalence.\n\n---------\n\nCo-authored-by: Maximilian <maximilian.muschalik@gmail.com>",
          "is_bot": false,
          "headline": "Oddshap improvements (#560)",
          "author_name": "Fabian Fumagalli",
          "author_login": "FFmgll",
          "committed_at": "2026-07-03T14:59:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7e7ade2d47c9389475810f269ee1b3f657a4206c",
          "body": "* push oddshap approximator\n\n* cleanup\n\n* Add ProxySPEX adapter helpers for OddSHAP\n\nTwo free-function helpers used inside OddSHAP.approximate:\n\n- lgboost_to_fourier(model_dict): converts a fitted LightGBM model\n  to its aggregated Fourier representation via per-tree DFS recursion\n  (Gorji et al., a\n[…]\nmatting\n\n---------\n\nCo-authored-by: YUANLUO WU <yuanluowu@gmail.com>\nCo-authored-by: Yuanluo Wu <141587731+42logos@users.noreply.github.com>\nCo-authored-by: Maximilian <maximilian.muschalik@gmail.com>",
          "is_bot": false,
          "headline": "OddSHAP approximator (#522)",
          "author_name": "Sara Nerinje",
          "author_login": "Sara-ne",
          "committed_at": "2026-07-02T09:34:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e06eaa9c99f7466aba29a3682013d78bb5133f6e",
          "body": "* dump benchmark\n\n* dump\n\n* add IntBench to instantiate a benchmark with either strings or objects\n\n* add draft for benchmark structure\n\n* update computers\n\n* add metrics\n\n* add benchmark for image and tabpfn\n\nCo-authored-by: Copilot <copilot@github.com>\n\n* fix structure for ty\n\nCo-authored-by: Copi\n[…]\ne.py\n\n* fix base.py\n\n---------\n\nCo-authored-by: Advueu963 <S.Thies@campus.lmu.de>\nCo-authored-by: Copilot <copilot@github.com>\nCo-authored-by: Santo Thies <49311372+Advueu963@users.noreply.github.com>",
          "is_bot": false,
          "headline": "shapiq Benchmark (#521)",
          "author_name": "Isabell Hans",
          "author_login": "IsaH57",
          "committed_at": "2026-06-30T16:17:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1db10aff161cc2021ff6552e0178fa5297c99ffc",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/checkout from 6 to 7 (#555)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-30T15:10:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2363d71009bb31564ef60cc88cdd8ff07af0995b",
          "body": "* fix: include nn modules in explainer package\n\n* chore: gitignore gen_modules from sphinx",
          "is_bot": false,
          "headline": "Include KNN explainers in the docs (#558)",
          "author_name": "Mathis Weber",
          "author_login": "Zaphoood",
          "committed_at": "2026-06-30T12:18:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "66f44e0b9809034d73e43cdbd56b164eead305ea",
          "body": "* Add ShaplEIG: Bayesian experimental design approximator for Shapley values\n\nShaplEIG fits a Gaussian process surrogate with a weighted Hamming product\nkernel on queried coalition values and sequentially selects coalitions by\nmaximizing the closed-form expected information gain about the Shapley\nva\n[…]\nfit cost note, max_candidates-vs-budget guidance\n\n* Address maintainer review: float64 guard, bib citation, :math: docstrings\n\n* Minor fix\n\n---------\n\nCo-authored-by: Advueu963 <S.Thies@campus.lmu.de>",
          "is_bot": false,
          "headline": "Add ShaplEIG: Bayesian experimental design approximator (#548)",
          "author_name": "david-rundel",
          "author_login": "david-rundel",
          "committed_at": "2026-06-15T13:35:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1b8b64339e9e4238ec79c1cdd349f967b4b0301a",
          "body": "…ncreasing shapiq robustness against huge feature counts (#539)\n\n* Add Linear and sklearn HPO support for ProxySHAP.\n\n* False initialize dict in ProxySPEX\n\n* Add ProxySHAP and ProxySPEX into the explainer\n\n* Update shapiq_games to work with baseline imputation\n\n* Update ProxySHAP alignment bug\n\n* Ad\n[…]\natboost and smac to proxy extra\n\n* Update changelog\n\n* addressing PR comments\n\n* addressing the PR comments.\n\n* improving typing\n\n---------\n\nCo-authored-by: Maximilian <maximilian.muschalik@gmail.com>",
          "is_bot": false,
          "headline": "Improving ProxySHAP, additional Approximators for TabularExplainer, i…",
          "author_name": "Santo Thies",
          "author_login": "Advueu963",
          "committed_at": "2026-06-12T21:41:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2edc7474de8d80fd3c86ac515fe59881e394d696",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 6 to 7.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump codecov/codecov-action from 6 to 7 (#541)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-10T06:11:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "756a2e6467307646d052639ef5522baaf5bc8e2a",
          "body": "* fix macos wheel packaging\n\n* activate wheel build on PR\n\n* Add ChangeLog Entry\n\n* Remove wheel building when PR are created.\n\n* Remove verbose comments",
          "is_bot": false,
          "headline": "Fixing wheel packaging (#535)",
          "author_name": "Santo Thies",
          "author_login": "Advueu963",
          "committed_at": "2026-05-30T14:39:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c66e168aeeec1b32780a209cfc6d2c64db4af633",
          "body": "… (#532)\n\n* fix(InteractionValues): skip dense lookup build for sparse-dict input\n\n* Add Changelog. Refactor to use shallow copy of dict instead of deep copy. Sufficient as dict contains only immutable data.\n\n---------\n\nCo-authored-by: Maximilian <maximilian.muschalik@gmail.com>\nCo-authored-by: Advueu963 <S.Thies@campus.lmu.de>",
          "is_bot": false,
          "headline": "fix(InteractionValues): skip dense lookup build for sparse-dict input…",
          "author_name": "Yuanluo Wu",
          "author_login": "42logos",
          "committed_at": "2026-05-29T09:28:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33de51ec3bbe4b5c0780ffa27430c375dc3f7804",
          "body": null,
          "is_bot": false,
          "headline": "Update Read the Docs configuration for environment setup",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-05-29T08:45:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9016cc0042d6027446bae86217d10792db7f464",
          "body": "Updated the release date for version 1.5.0 in the changelog.",
          "is_bot": false,
          "headline": "Change release date for v1.5.0 to 2026-05-29",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-05-29T08:27:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "861feca5ede56a4659b982cf2a7be6abbdf72add",
          "body": "* Add scatter_plot for InteractionValues (#418)\n\nIntroduces shapiq.scatter_plot, a SHAP-style scatter (dependence) plot that\nworks for both first-order Shapley values and higher-order interactions. For\nhigher-order interactions the x-axis is restricted to a single feature in the\ninteraction tuple (d\n[…]\nthe scatter (zorder=-2),\nmatching the requested \"fancy x-axis\" look.\n\n---------\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>\nCo-authored-by: Maximilian Muschalik <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add scatter plot visualization for interaction values (#516)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-05-29T08:26:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a2ed6104127c1b1382b7375ccbc41b995e25602d",
          "body": "* made SV default\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>\n\n* added changes to CHANGELOG.md\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>\n\n---------\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>",
          "is_bot": false,
          "headline": "Make SV default. (#530)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-05-27T09:19:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57c254b0486e5104fb67bca998a86759a201e990",
          "body": "* Rework ProxySPEX into proxy module. Rework Spex in spex module.\n\n* add entry to changelog\n\n* Added import error in sparse if necessary modules not installed\n\n* Added --all-extras to uv for CI\n\n* Make spex and proxy module really optionally throughout shapiq library.\n\n* fix ruff errors\n\n* Improved \n[…]\narnings\n\n* revert build on pull request. Everything seems to work\n\n* Making approximators more consistent with index and max_order usage.\n\n* Using class stubs for import errors\n\n* fixing typing errors",
          "is_bot": false,
          "headline": "Rework ProxySPEX into proxy module. Rework Spex in spex module. (#529)",
          "author_name": "Santo Thies",
          "author_login": "Advueu963",
          "committed_at": "2026-05-26T10:43:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "af6d6860ef22d14f2b2b991a9c45d4aa31e1e2a5",
          "body": null,
          "is_bot": false,
          "headline": "Build macOS wheels on macos-14 with matching deployment target (#528)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-05-22T15:34:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82cf38012cece5c9fa0d4dac3125a24d1eb81265",
          "body": "* Build arm64-only macOS wheels and document Intel macOS drop\n\nnumba and llvmlite no longer publish x86_64 macOS wheels, so cross-built\nx86_64 macOS wheels fail their dependency install and Intel macOS is\nunsupported by the dependency stack regardless. Builds only arm64 macOS\nwheels and records the \n[…]\nst followed by version,\ndeprecations, docs, performance, and bugfixes.\n\nhttps://claude.ai/code/session_01RCKu4WHLMCURedkBzRvc1J\n\n---------\n\nCo-authored-by: Maximilian Muschalik <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Reorganize v1.5.0 changelog and drop Intel macOS support (#527)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-05-22T15:17:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "83324b92e6c285f52cf1265bd084c9f99bc6f613",
          "body": "The macos-13 hosted runner has been retired by GitHub, so wheel build\njobs requesting it queue indefinitely and block the release. The ARM\nmacos-latest runner now cross-builds both arm64 and x86_64 macOS wheels,\nkeeping Intel-Mac coverage with a single runner.\n\nhttps://claude.ai/code/session_01RCKu4WHLMCURedkBzRvc1J\n\nCo-authored-by: Maximilian Muschalik <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Drop retired macos-13 runner from wheel build matrix (#526)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-05-22T15:07:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c59182b6dcb6d4195670a4a554772a5d26242cd6",
          "body": "Signed-off-by: Maximilian <maximilian.muschalik@gmail.com>",
          "is_bot": false,
          "headline": "changed emails (#525)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-05-22T14:29:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a550fcc739ae6c8c3df231493e8b2b1f9b74c87e",
          "body": "* Release housekeeping for v1.5.0\n\nFinalizes the v1.5.0 changelog with a release date, fixes a path typo,\nand adds missing entries for tree-conversion locale fix (#515), ProxySHAP\nsegfault fix (#506), the notebook-to-Sphinx-Gallery move (#509), and the\nbaseline imputer speedup (#498). Updates CITATI\n[…]\n the cibuildwheel\ntest-command to also import shapiq.tree.linear.cext.\n\nhttps://claude.ai/code/session_01RCKu4WHLMCURedkBzRvc1J\n\n---------\n\nCo-authored-by: Maximilian Muschalik <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Release v1.5.0 (2026-05-22) (#523)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-05-22T14:20:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0d22d7dcc17cd4df8c85ef17e82c9b26e638b04b",
          "body": "…ressionMSR approximator. (#519)\n\n* update datast\n\n* remove local tabarena datasets\n\n* Update the TreeExplainer. Introducing improved InterventionalTreeExplainer. Improved Tree conversions. Added CatBoostSupport.\n\n* Added proper XGBoost support for LinearTreeSHAP.\n\n* add Windows support for SIMD\n\n* update docs examples\n\n* Added citation to RegressionMSR",
          "is_bot": false,
          "headline": "Refactoring TreeExplainer, Adding InterventionalTreeExplainer and Reg…",
          "author_name": "Santo Thies",
          "author_login": "Advueu963",
          "committed_at": "2026-05-21T15:21:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4300f40d47343c1a79194bb4a24a0975302d7cf9",
          "body": "* fix: Tree conversion breaking when LC_NUMERIC not standard \"C\".\n\n* fix: Windows uses CRLF instead of LF. Made converter error prone against this\n\n---------\n\nCo-authored-by: Maximilian <maximilian.muschalik@gmail.com>",
          "is_bot": false,
          "headline": "fix: Tree conversion breaking when LC_NUMERIC not standard \"C\". (#515)",
          "author_name": "Santo Thies",
          "author_login": "Advueu963",
          "committed_at": "2026-05-13T14:31:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9565f0b78b7bc05056559ae67c41c1317c4cde5",
          "body": "* feat: copy nn explainers from shapiq_student\n\n* feat: integrate nn explainers into dynamic explainer dispatch\n\n* feat: remove unused property `mode` from nn explainers\n\n* feat: clean up NN explainer base class\n\n* refactor: turn BruteForceKNNExplainer into benchmark game\n\n* refactor: factor out bas\n[…]\nample\"\n\nThis reverts commit c47ea53272e161c1389cc12ea135810bfa2458c2.\n\n---------\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>\nCo-authored-by: Maximilian <maximilian.muschalik@gmail.com>",
          "is_bot": false,
          "headline": "Add explainers for nearest neighbor models (#487)",
          "author_name": "Mathis Weber",
          "author_login": "Zaphoood",
          "committed_at": "2026-04-23T12:44:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8f23fbd74ddab2e590b5b9cc4ba33fc45b77d725",
          "body": "* remove old tree conversion (outdated)\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>\n\n* remove legacy shapiq_games tests\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>\n\n* delete dead test\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>\n\n* removed tests.shapiq_\n[…]\n1.4.1 and we will have a different implemenation in shapiq benchmark)\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>\n\n---------\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>",
          "is_bot": false,
          "headline": "Remove Outdated/Dead Code (#514)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-04-21T16:06:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "799cfd0f2c32f17446130247a7ac3519e68cce82",
          "body": "* fix: include deletion of auto examples dir in agents file\n\n* fix: include deletion of auto examples dir in claude file\n\n* fix CLAUDE.md symlink",
          "is_bot": false,
          "headline": "Include deletion of auto examples dir in agents file (#513)",
          "author_name": "Mathis Weber",
          "author_login": "Zaphoood",
          "committed_at": "2026-04-20T15:48:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8edc3c204627015a65c58960a82dbe5e76e9d52",
          "body": "Removed an empty line in CLAUDE.md.",
          "is_bot": false,
          "headline": "insane refactor and clean-up of shapiq",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-04-14T12:08:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d5940518366289e1309750a9fdab9464c14f0ac",
          "body": "Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.13.0 to 1.14.0.\n- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)\n- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.13.0...v1.14.0)\n\n---\nupdated-dependencies:\n- dep\n[…]\nirect:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (#510)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-14T12:03:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "887a013ab2a464dd8cdc4b78fa80946141afe547",
          "body": "…509)\n\n* removed all notebooks from the library and moved to sphinx-gallery\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>\n\n* updated ci to not require pandoc anymore\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>\n\n* updated gitignore\n\nSigned-off-by: Maximilian <maximilian.\n[…]\nby: Maximilian <maximilian.muschalik@gmail.com>\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>\nCo-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "removed all notebooks from the library and moved to sphinx-gallery (#…",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-04-09T11:37:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "13b0faf5a8d9c538f0bc87f2cb287a1910cde767",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5 to 6.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump codecov/codecov-action from 5 to 6 (#508)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-03T13:35:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2ccfeb52d4208bbe6bdd99fb9c20230fff57a474",
          "body": "* docs: fix duplicate-label warnings via autosectionlabel_prefix_document\n\nSetting autosectionlabel_prefix_document = True prefixes every\nauto-generated section label with its document path, preventing\ncollisions when multiple notebooks share identical headings like\n\"General Use\" or \"Feature Names\".\n[…]\nned-off-by: Maximilian <maximilian.muschalik@gmail.com>\n\n* updated CI\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>\n\n---------\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>",
          "is_bot": false,
          "headline": "Work on Docs to remove warnings. (#495)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-03-28T12:39:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4d9ae7050ae9b8516ff1fb3ecc2b79b4f8f7d858",
          "body": "Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 8.\n- [Release notes](https://github.com/actions/download-artifact/releases)\n- [Commits](https://github.com/actions/download-artifact/compare/v4...v8)\n\n---\nupdated-dependencies:\n- dependency-name: actions/downlo\n[…]\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: Maximilian <maximilian.muschalik@gmail.com>",
          "is_bot": true,
          "headline": "Bump actions/download-artifact from 4 to 8 (#503)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-24T13:46:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "747f1f328bab016f835fe3a8d4fbcc9a82458ef8",
          "body": null,
          "is_bot": false,
          "headline": "fixing segfault in ProxySHAP C++ Code (#506)",
          "author_name": "Santo Thies",
          "author_login": "Advueu963",
          "committed_at": "2026-03-23T14:56:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76a7726d4107cbcf973bd1f8dadd8827b1733fdf",
          "body": "Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 7.\n- [Release notes](https://github.com/actions/upload-artifact/releases)\n- [Commits](https://github.com/actions/upload-artifact/compare/v4...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/upload-artifac\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/upload-artifact from 4 to 7 (#504)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-20T17:23:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ec73ba9746c367f4407603d32a4d587c7e4548f5",
          "body": "* added numpy to build requires\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>\n\n* updated AGENTS.md to be more helpful.\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>\n\n* github workflows\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>\n\n* wrote a short description about how to create releases\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>\n\n---------\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>",
          "is_bot": false,
          "headline": "fix-install (#502)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-03-13T18:27:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "56097a7cd88c199b78b12caac3c00214bf5f86a2",
          "body": "* Added agents .claude gitignore\n\n* added lazy dispatch\n\n* initial tree refactoring\n\n* Adding interventional explainer to shapiq\n\n* Adjusting tree tests\n\n* Fixing tree imports\n\n* fixing the interventional update\n\n* Adding new datasets to shapiq\n\n* lazy dispatch change\n\n* Refactoring of Types\n\n* Test\n[…]\nNGELOG.md\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>\n\n---------\n\nSigned-off-by: Maximilian <maximilian.muschalik@gmail.com>\nCo-authored-by: Maximilian <maximilian.muschalik@gmail.com>",
          "is_bot": false,
          "headline": "Tree refactor (#501)",
          "author_name": "Santo Thies",
          "author_login": "Advueu963",
          "committed_at": "2026-03-13T15:40:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "618d75779a99b751fd6238cf069ab15d14ccac66",
          "body": "* updated some little inconsistencies across the codebase\n\n* updated github actions to cancel in progress\n\n* updated some little inconsistencies across the codebase\n\n* updated github actions to cancel in progress",
          "is_bot": false,
          "headline": "Rework information (#499)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-03-12T14:02:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62c10dd98a3452550a524d7d79c46380caa26420",
          "body": null,
          "is_bot": false,
          "headline": "removes for loop improving runtime of baseline imputer (#498)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-03-12T10:03:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af95153cee486757b918a0dd20907ece3c285fa0",
          "body": "* bumped min python version to 3.12\n\n* Removed deprecated behaviour from shapiq:\n - removed `path_to_values` from `Game`\n - made json the only viable file format for `InteractionValues`\n\n* updated CHANGELOG.md\n\n* bumped min python version to 3.12\n\n* bumped python version to 3.14\n\n* added entry to CH\n[…]\ncode\n\n* fixed tabpfn code\n\n* increased workflow dependencies for less workflow runtime in case of failure\n\n* introduce AGENTS.md (prev. only CLAUDE.md)\n\n* fixed tests with new versions of dependencies",
          "is_bot": false,
          "headline": "Bump python version (#497)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-03-12T08:48:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c45923cdbae6811993f25762e237432820225096",
          "body": "* Removed deprecated behaviour from shapiq:\n - removed `path_to_values` from `Game`\n - made json the only viable file format for `InteractionValues`\n\n* updated CHANGELOG.md",
          "is_bot": false,
          "headline": "Removed deprecated behaviour from shapiq. (#496)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-03-11T17:11:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d8c92c707c20850ca774cd05edb2c4baedd5f6d",
          "body": "Updates the requirements on [ipython](https://github.com/ipython/ipython) to permit the latest version.\n\nUpdates `ipython` to 8.38.0\n- [Release notes](https://github.com/ipython/ipython/releases)\n- [Commits](https://github.com/ipython/ipython/compare/rel-0.8.4...8.38.0)\n\n---\nupdated-dependencies:\n- \n[…]\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: Maximilian <maximilian.muschalik@gmail.com>",
          "is_bot": true,
          "headline": "Update ipython requirement in the pip-all-updates group (#491)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-11T07:48:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1fe2d0fa75295d268dd54c1b6c08486e372c471b",
          "body": "Reverted fail on warning.",
          "is_bot": false,
          "headline": "Remove fail on warning.",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-03-09T16:29:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "beb6de9942f8e8ea45d7494cbe3a0ca153510606",
          "body": "* docs: add sphinx-gallery for runnable example scripts\n\nIntroduces sphinx-gallery as an alternative to Jupyter notebooks for\nlightweight, fast-running code examples. Adds a minimal example script\n(weighted voting game with Shapley values) and gitignores the generated\nauto_examples/ output directory\n[…]\n --keep-going ensures all warnings are\nreported before the build exits.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Adds Examples with sphinx gallery.",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-03-09T16:27:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "002bd3998b28754a0305998ec129d00706e59c98",
          "body": "* add MANIFEST.in\n\n* add MANIFEST.in\n\n* updated MANIFEST.in and python-publish.yml workflow\n\n* updated CHANGELOG.md\n\n* updated shapiq-games warning\n\n* migrate type checker from pyright to ty and fix all type errors\n\nReplace pyright with Astral's ty (Rust-based, 10-100x faster) across the\nentire proj\n[…]\nore directives for unresolvable stubs (lightgbm, matplotlib internals).\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add `ty` linter. (#493)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2026-03-09T15:09:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "92e48bae3bfe865329b599684d29a91f1c8e333f",
          "body": "Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.\n- [Release notes](https://github.com/actions/upload-artifact/releases)\n- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/upload-artifac\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/upload-artifact from 6 to 7 (#492)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-06T15:30:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b9046d0e6ab60de5f96926e0977ed26add486f17",
          "body": "Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6.\n- [Release notes](https://github.com/actions/upload-artifact/releases)\n- [Commits](https://github.com/actions/upload-artifact/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/upload-artifac\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/upload-artifact from 5 to 6 (#485)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-02-03T13:25:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "716ece7d3bc32428b087c5f8570cac58f631ac3c",
          "body": null,
          "is_bot": false,
          "headline": "tests: exclude type checking blocks from test coverage (#490)",
          "author_name": "Mathis Weber",
          "author_login": "Zaphoood",
          "committed_at": "2026-02-03T13:24:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ca9860cccb8f41101a1ee8bc266b19cefee3717",
          "body": null,
          "is_bot": false,
          "headline": "docs: fix instructions for docs dependencies and building (#486)",
          "author_name": "Mathis Weber",
          "author_login": "Zaphoood",
          "committed_at": "2026-01-07T21:26:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "307c6abd247230c927d29921c004f4eb8585fce6",
          "body": null,
          "is_bot": true,
          "headline": "Bump actions/checkout from 5 to 6 (#479)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-12-28T15:20:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65b4260d7d8d7fa4c1948e60af21ed4c059ea2c6",
          "body": null,
          "is_bot": false,
          "headline": "Clarified how to show feature values (#478)",
          "author_name": "Martin Rohbeck",
          "author_login": "martinrohbeck",
          "committed_at": "2025-12-28T15:19:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f4db3695e4ab6d970c611381ec25edc908c3c17",
          "body": null,
          "is_bot": false,
          "headline": "Bug fix for ProxySPEX, removed external library label in tests (#484)",
          "author_name": "Landon Butler",
          "author_login": "landonbutler",
          "committed_at": "2025-12-28T15:18:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41d28118b5858a3db2a006773ae36c1bb625653d",
          "body": "* add MANIFEST.in\n\n* add MANIFEST.in\n\n* updated MANIFEST.in and python-publish.yml workflow\n\n* updated CHANGELOG.md\n\n* updated shapiq-games warning",
          "is_bot": false,
          "headline": "464 fix publish workflow (#475)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-11-10T19:38:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99f0c3009c60e60af0b97bcee1d1b3351f9ea326",
          "body": "* Fixed bug in approximator.sparse\n\n* formatting fix",
          "is_bot": false,
          "headline": "Bug in Sparse Approximator (#470)",
          "author_name": "Landon Butler",
          "author_login": "landonbutler",
          "committed_at": "2025-11-10T18:58:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d705427fef1356af82c625d212f4a6094e94a9c",
          "body": null,
          "is_bot": false,
          "headline": "reverted python-publish.yml",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-31T11:29:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6bdfb25574aa4202ee367ce35bca7c10f53cc4bd",
          "body": null,
          "is_bot": false,
          "headline": "updated build pipeline",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-31T09:59:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e405ef33269f1fd9e2f433b78850c92395e54a6f",
          "body": "* moves sparse_transform imports into function calls\n\n* change ci pipeline\n\n* removes override calls\n\n* removes checkmarks because windows is sad and does not like colors :(\n\n* moves ProxySPEX up in the README.md\n\n* updated pyproject.toml\n\n* updated CHANGELOG.md\n\n* Update CHANGELOG.md\n\nCo-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>\n\n---------\n\nCo-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "1.4.0 release (#462)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-31T08:48:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0641cfd23b6fab337e262366298f29d754a783eb",
          "body": "…s/upload-artifact-5\n\nBump actions/upload-artifact from 4 to 5",
          "is_bot": false,
          "headline": "Merge pull request #458 from mmschlk/dependabot/github_actions/action…",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-29T17:07:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "984c08bc478f5a4a372d4cd754279487e75a2ffa",
          "body": "…ifact-5",
          "is_bot": false,
          "headline": "Merge branch 'main' into dependabot/github_actions/actions/upload-art…",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-29T16:48:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68678c0df3cf9349af9f2f044ef43595d93b6491",
          "body": "logit-per-default-for-tabpfn",
          "is_bot": false,
          "headline": "Merge pull request #460 from mmschlk/logit-per-default-for-tabpfn",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-29T16:48:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4e03d48becfd009a2ffa3ad6bd7ac0802f3e6b2",
          "body": "Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Update CHANGELOG.md",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-29T16:41:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "808c683ef430fdabb2092086c0996eb7c67378c9",
          "body": null,
          "is_bot": false,
          "headline": "updates project setup",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-29T16:27:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5dc3f6bdfeedfe77bc3da6c146c709b1eef47628",
          "body": "…t_logits` function",
          "is_bot": false,
          "headline": "updates tabpfn dependency to include the new `TabPFNClassifier.predic…",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-29T16:24:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e618762e98441f2f66a0b4ea86b552e42f0b0e4",
          "body": null,
          "is_bot": false,
          "headline": "updates CHANGELOG.md",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-29T16:23:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82ce6de46b85e2f5a7207aa704f73496388fa000",
          "body": null,
          "is_bot": false,
          "headline": "solves #426",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-29T16:23:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7fcb36fdb095bddcf6e98fff318eee88c5770b40",
          "body": "Product kernel explainer",
          "is_bot": false,
          "headline": "Merge pull request #431 from mmschlk/product-kernel-explainer",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-28T10:39:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b32039e6b71a40a9abe9c1817ec6a290f9209f3",
          "body": "Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5.\n- [Release notes](https://github.com/actions/upload-artifact/releases)\n- [Commits](https://github.com/actions/upload-artifact/compare/v4...v5)\n\n---\nupdated-dependencies:\n- dependency-name: actions/upload-artifact\n  dependency-version: '5'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump actions/upload-artifact from 4 to 5",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-10-27T07:29:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d522cae4531ee7b16048148b34010dd2c0bd7413",
          "body": null,
          "is_bot": false,
          "headline": "Adjustments accoding to Code Review",
          "author_name": "Thies, Santo",
          "author_login": "Advueu963",
          "committed_at": "2025-10-26T11:42:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a7fe41ddaf6e747b73dadf43cc010f0b63d6608",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into product-kernel-explainer",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-24T14:08:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d31eb399d22dfa708d93290fe55c6258c9886fe",
          "body": null,
          "is_bot": false,
          "headline": "Rename workflow from 'Pull Request Checks' to 'CI Tests'",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-24T14:03:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3abe3f4e948877d4342e2de8672acd352fd13cc9",
          "body": "Added code coverage and CI badges to README.",
          "is_bot": false,
          "headline": "Update README with new badges",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-24T14:02:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd5bc8a1a26c50620a6da8b91561576554177a8b",
          "body": null,
          "is_bot": false,
          "headline": "Change installation command to sync docs group",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-24T13:51:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "354a08202c15538932b470e77a68797fab10cf06",
          "body": "* updates ci pipeline\n\n* updated ci workflow\n\n* updated ci workflow\n\n* updated ci workflow\n\n* updated ci workflow\n\n* updated ci workflow",
          "is_bot": false,
          "headline": "🛠️  Update CI Workflow (#456)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-24T12:56:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "304a4cde2ef4d9136c447d8bdf1a4fd4c3d9969d",
          "body": "ProxySPEX Approximator",
          "is_bot": false,
          "headline": "Merge pull request #442 from landonbutler/main",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-24T11:20:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f371daec4480394ea4e2e4e275d97bfe90e0c07",
          "body": null,
          "is_bot": false,
          "headline": "adds skips to proxyspex tests and no lightgbm",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-24T11:10:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eec71d958818a37140e54c8c5cfcd0f4f100abd2",
          "body": "…er/main\n\n# Conflicts:\n#\tpyproject.toml",
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'landonbutler/main' into fork/landonbutl…",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-24T10:51:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2cbfa8c6871705df2e12e029dd7efc99ad1c7114",
          "body": null,
          "is_bot": false,
          "headline": "removes lightgbm from macos test runner",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-24T10:50:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0ea3cfcdface03b032a67f84dbe5799cbef3ea5",
          "body": null,
          "is_bot": false,
          "headline": "removes lightgbm from macos test runner",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-24T10:46:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f0cd65f9306158383a5c5b3630ec8e478f98595",
          "body": "# Conflicts:\n#\tdocs/source/notebooks/language_notebooks/language_model_game.ipynb\n#\tsrc/shapiq/approximator/sparse/base.py",
          "is_bot": false,
          "headline": "Merge branch 'main' into fork/landonbutler/main",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-24T08:47:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4a9a83cba5da7f3c437b4370117710d98590e73",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into product-kernel-explainer",
          "author_name": "Thies, Santo",
          "author_login": "Advueu963",
          "committed_at": "2025-10-23T15:48:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "830c6bc23a8ede5ca8d20f5db74ca8880a839730",
          "body": "Gaussian and copula imputer",
          "is_bot": false,
          "headline": "Merge pull request #435 from milanagm/gaussian-and-copula-imputer",
          "author_name": "Santo Thies",
          "author_login": "Advueu963",
          "committed_at": "2025-10-23T15:38:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ff5c9c77c351c1fabf1dcfaa7d31ee0c1ed332e",
          "body": null,
          "is_bot": false,
          "headline": "Moved dummy model to fixtures",
          "author_name": "Thies, Santo",
          "author_login": "Advueu963",
          "committed_at": "2025-10-23T14:04:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1809cfa30ec5d38b6eff3c9fbe7d6d413df46516",
          "body": null,
          "is_bot": false,
          "headline": "Bug fix of vectorized gaussian copula sampling",
          "author_name": "Thies, Santo",
          "author_login": "Advueu963",
          "committed_at": "2025-10-21T21:20:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "435a34452b0c0dde382e4a4aaf27e561c4e97624",
          "body": null,
          "is_bot": false,
          "headline": "Added test to check that product_kernel methods are detected properly",
          "author_name": "Thies, Santo",
          "author_login": "Advueu963",
          "committed_at": "2025-10-21T20:54:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "10b8776a57717174c3631175630d3f217aaf8cc3",
          "body": "…uter",
          "is_bot": false,
          "headline": "Improved sample_size setting, introducing sample_size property in Imp…",
          "author_name": "Thies, Santo",
          "author_login": "Advueu963",
          "committed_at": "2025-10-21T20:38:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1caf45d700b0abb2fd5c854bca60665261bd82db",
          "body": null,
          "is_bot": false,
          "headline": "Vectoziation of _tranform_from_gaussian",
          "author_name": "Thies, Santo",
          "author_login": "Advueu963",
          "committed_at": "2025-10-21T20:37:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8acf3d1f512eeb4dbe7629a47263d8b272eccce",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into gaussian-and-copula-imputer",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-21T14:53:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac5614648d933105133b9cb84c719445c67d871c",
          "body": "…#450)\n\n* makes n_players optional\n\n* adds tests for new behaviour\n\n* refactored ExactComputer to be type safe and closes\n\n* adds tests for checking wrong indices\n\n* updates CHANGELOG.md\n\n* fixed broken tests",
          "is_bot": false,
          "headline": "``ExactComputer`` Refactor Types and Making ``n_players`` optional. (…",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-21T14:53:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "676d00aedd98612f9c18c8a9dbf3698177c37ebc",
          "body": "* updated imputation mechanism and docs closes #437\n\n* update test to also cover normalized case\n\n* updates API reference structure and closes #452",
          "is_bot": false,
          "headline": "updated imputation mechanism and docs closes #437 (#449)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-21T14:21:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05fe2648f4582b238da4552661141b1f80947edd",
          "body": null,
          "is_bot": false,
          "headline": "uv lock update after adding gaussian and copula imputer",
          "author_name": "Thies, Santo",
          "author_login": "Advueu963",
          "committed_at": "2025-10-16T19:47:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81efb59d547e87ede760e7d8396a2437554e0cc6",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into pr/milanagm/435",
          "author_name": "Thies, Santo",
          "author_login": "Advueu963",
          "committed_at": "2025-10-16T19:44:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7bb45e9a29bdd9d2adb014ed4eb8e8274d015b6f",
          "body": null,
          "is_bot": false,
          "headline": "merge main onto pr",
          "author_name": "Thies, Santo",
          "author_login": "Advueu963",
          "committed_at": "2025-10-16T19:38:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0bbd9cde6b95dcf3905c45acfe9f8bd7efe7fa1",
          "body": null,
          "is_bot": false,
          "headline": "updated import in test_tabular_local_xai making",
          "author_name": "Thies, Santo",
          "author_login": "Advueu963",
          "committed_at": "2025-10-15T20:03:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "21ff245b7ba273191ba966899c9d1424e4cefb3f",
          "body": null,
          "is_bot": false,
          "headline": "uv lock update",
          "author_name": "Thies, Santo",
          "author_login": "Advueu963",
          "committed_at": "2025-10-15T19:59:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "89d8b60b4a7e8604ac974ced2b94d7c4cd59308f",
          "body": null,
          "is_bot": false,
          "headline": "static typing of Product Kernel",
          "author_name": "Thies, Santo",
          "author_login": "Advueu963",
          "committed_at": "2025-10-15T19:54:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "606a077aaad62d5358fdb1fc887312fe30ebd304",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into product-kernel-explainer",
          "author_name": "Thies, Santo",
          "author_login": "Advueu963",
          "committed_at": "2025-10-15T19:44:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "193f1a9eff4b15b8f95461d4b9c39c25bac91598",
          "body": "* First Pyright cleanup\n\n* TypeChecked game\n\n* fixed introduced bugs in game and interaction_values\n\n* Pyright Save Sampling\n\n* TypeSafe Approximator\n\n* Typechecked Datasets\n\n* Explainer folder typechecked\n\n* GameTheory Typechecked\n\n* Imputer Typechecked\n\n* Plot Typechecked\n\n* Added static typecheck\n[…]\nremoved generics from explainer again\n\n* tightened index type check\n\n* made n_players None at assignment again\n\n* moved comments\n\n---------\n\nCo-authored-by: Maximilian <maximilian.muschalik@gmail.com>",
          "is_bot": false,
          "headline": "Enhance type safety and fix bugs across the codebase (#430)",
          "author_name": "Santo Thies",
          "author_login": "Advueu963",
          "committed_at": "2025-10-14T14:26:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "baa03187599024c786e8fc5e2a6ec80e5a6233e9",
          "body": "* adapted release workflow\n\n* cherry picked the hotfix from 1.3.2",
          "is_bot": false,
          "headline": "adapted release workflow (#448)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-14T11:56:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7891f9e4a3a0829879b2b920d0b8f3d3e324f805",
          "body": null,
          "is_bot": false,
          "headline": "adapted release workflow (#447)",
          "author_name": "Maximilian",
          "author_login": "mmschlk",
          "committed_at": "2025-10-14T11:13:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ddda4a73048e2e0e23384aba55bb160e6f443c0d",
          "body": "Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 6 to 7.\n- [Release notes](https://github.com/astral-sh/setup-uv/releases)\n- [Commits](https://github.com/astral-sh/setup-uv/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: astral-sh/setup-uv\n  dependency-version: '\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump astral-sh/setup-uv from 6 to 7 (#443)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-10-14T08:37:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 22,
      "commits_last_year": 158,
      "latest_release_at": "2026-07-06T08:11:37Z",
      "latest_release_tag": "v1.6.0",
      "releases_from_tags": false,
      "days_since_last_push": 2,
      "active_weeks_last_year": 32,
      "days_since_latest_release": 20,
      "mean_days_between_releases": 52.1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 85,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "shapiq",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "python",
            "machine learning",
            "interpretable machine learning",
            "shap",
            "xai",
            "explainable ai",
            "interaction",
            "shapley interactions",
            "shapley values",
            "feature interaction",
            "Development Status :: 4 - Beta",
            "Intended Audience :: Developers",
            "Intended Audience :: Science/Research",
            "Operating System :: MacOS",
            "Operating System :: Microsoft :: Windows",
            "Operating System :: Unix",
            "Programming Language :: Python :: 3",
            "Programming Language :: Python :: 3.12",
            "Programming Language :: Python :: 3.13",
            "Programming Language :: Python :: 3.14",
            "Topic :: Scientific/Engineering",
            "Topic :: Scientific/Engineering :: Artificial Intelligence"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/shapiq/",
          "is_deprecated": false,
          "latest_version": "1.6.0",
          "repository_url": "https://github.com/mmschlk/shapiq",
          "versions_count": 23,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2023-10-17T15:46:46.653500Z",
          "latest_published_at": "2026-07-06T08:24:05.766251Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 20
        }
      ]
    },
    "popularity": {
      "forks": 68,
      "stars": 762,
      "watchers": 10,
      "fork_history": {
        "days": [
          {
            "date": "2024-02-25",
            "count": 1
          },
          {
            "date": "2024-05-20",
            "count": 1
          },
          {
            "date": "2024-06-08",
            "count": 1
          },
          {
            "date": "2024-06-17",
            "count": 1
          },
          {
            "date": "2024-06-18",
            "count": 1
          },
          {
            "date": "2024-09-26",
            "count": 1
          },
          {
            "date": "2024-09-27",
            "count": 3
          },
          {
            "date": "2024-10-11",
            "count": 1
          },
          {
            "date": "2024-11-14",
            "count": 1
          },
          {
            "date": "2024-12-05",
            "count": 1
          },
          {
            "date": "2025-01-15",
            "count": 1
          },
          {
            "date": "2025-01-28",
            "count": 1
          },
          {
            "date": "2025-01-30",
            "count": 1
          },
          {
            "date": "2025-03-01",
            "count": 1
          },
          {
            "date": "2025-03-02",
            "count": 5
          },
          {
            "date": "2025-03-04",
            "count": 1
          },
          {
            "date": "2025-03-05",
            "count": 1
          },
          {
            "date": "2025-03-07",
            "count": 2
          },
          {
            "date": "2025-03-10",
            "count": 1
          },
          {
            "date": "2025-03-12",
            "count": 1
          },
          {
            "date": "2025-03-13",
            "count": 1
          },
          {
            "date": "2025-03-15",
            "count": 1
          },
          {
            "date": "2025-03-17",
            "count": 1
          },
          {
            "date": "2025-03-20",
            "count": 1
          },
          {
            "date": "2025-03-22",
            "count": 1
          },
          {
            "date": "2025-03-24",
            "count": 1
          },
          {
            "date": "2025-04-10",
            "count": 1
          },
          {
            "date": "2025-06-16",
            "count": 1
          },
          {
            "date": "2025-07-16",
            "count": 1
          },
          {
            "date": "2025-08-05",
            "count": 1
          },
          {
            "date": "2025-09-05",
            "count": 1
          },
          {
            "date": "2025-09-14",
            "count": 1
          },
          {
            "date": "2025-09-27",
            "count": 1
          },
          {
            "date": "2025-11-01",
            "count": 1
          },
          {
            "date": "2025-11-20",
            "count": 1
          },
          {
            "date": "2025-12-08",
            "count": 1
          },
          {
            "date": "2025-12-10",
            "count": 2
          },
          {
            "date": "2025-12-12",
            "count": 1
          },
          {
            "date": "2025-12-16",
            "count": 1
          },
          {
            "date": "2026-03-20",
            "count": 2
          },
          {
            "date": "2026-04-14",
            "count": 1
          },
          {
            "date": "2026-04-20",
            "count": 1
          },
          {
            "date": "2026-04-24",
            "count": 1
          },
          {
            "date": "2026-04-25",
            "count": 1
          },
          {
            "date": "2026-04-26",
            "count": 2
          },
          {
            "date": "2026-04-30",
            "count": 1
          },
          {
            "date": "2026-05-04",
            "count": 1
          },
          {
            "date": "2026-05-06",
            "count": 1
          },
          {
            "date": "2026-06-12",
            "count": 3
          },
          {
            "date": "2026-06-16",
            "count": 1
          },
          {
            "date": "2026-06-18",
            "count": 1
          },
          {
            "date": "2026-07-14",
            "count": 1
          },
          {
            "date": "2026-07-15",
            "count": 1
          },
          {
            "date": "2026-07-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 66,
        "total_forks": 68
      },
      "star_history": null,
      "open_issues_and_prs": 31
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "docs/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "src/shapiq/py.typed"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 96625,
      "source_files_sampled": 361,
      "oversized_source_files": 2,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 937
    },
    "dependencies": {
      "manifests": [
        "pyproject.toml",
        "setup.py"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 25,
        "malicious_count": 0,
        "assessed_package": "pypi:shapiq@1.6.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "pypi"
      ],
      "dependencies": [
        {
          "name": "numpy",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "scipy",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "pandas",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "joblib",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "scikit-learn",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "tqdm",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "requests",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "matplotlib",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "networkx",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "colour",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "pillow",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "colour",
            "direct": true,
            "version": "0.1.5",
            "ecosystem": "pypi"
          },
          {
            "name": "joblib",
            "direct": true,
            "version": "1.5.3",
            "ecosystem": "pypi"
          },
          {
            "name": "matplotlib",
            "direct": true,
            "version": "3.10.8",
            "ecosystem": "pypi"
          },
          {
            "name": "networkx",
            "direct": true,
            "version": "3.6.1",
            "ecosystem": "pypi"
          },
          {
            "name": "numpy",
            "direct": true,
            "version": "2.4.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pandas",
            "direct": true,
            "version": "3.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pillow",
            "direct": true,
            "version": "12.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "requests",
            "direct": true,
            "version": "2.32.5",
            "ecosystem": "pypi"
          },
          {
            "name": "scikit-learn",
            "direct": true,
            "version": "1.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "scipy",
            "direct": true,
            "version": "1.17.1",
            "ecosystem": "pypi"
          },
          {
            "name": "tqdm",
            "direct": true,
            "version": "4.67.3",
            "ecosystem": "pypi"
          },
          {
            "name": "absl-py",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "accessible-pygments",
            "direct": false,
            "version": "0.0.5",
            "ecosystem": "pypi"
          },
          {
            "name": "alabaster",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "alembic",
            "direct": false,
            "version": "1.18.5",
            "ecosystem": "pypi"
          },
          {
            "name": "annotated-doc",
            "direct": false,
            "version": "0.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "annotated-types",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "anyio",
            "direct": false,
            "version": "4.12.1",
            "ecosystem": "pypi"
          },
          {
            "name": "appnope",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "pypi"
          },
          {
            "name": "argon2-cffi",
            "direct": false,
            "version": "25.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "argon2-cffi-bindings",
            "direct": false,
            "version": "25.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "arrow",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "asttokens",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "astunparse",
            "direct": false,
            "version": "1.6.3",
            "ecosystem": "pypi"
          },
          {
            "name": "async-lru",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "attrs",
            "direct": false,
            "version": "25.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "babel",
            "direct": false,
            "version": "2.18.0",
            "ecosystem": "pypi"
          },
          {
            "name": "backoff",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "beautifulsoup4",
            "direct": false,
            "version": "4.14.3",
            "ecosystem": "pypi"
          },
          {
            "name": "bleach",
            "direct": false,
            "version": "6.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "botorch",
            "direct": false,
            "version": "0.14.0",
            "ecosystem": "pypi"
          },
          {
            "name": "catboost",
            "direct": false,
            "version": "1.2.10",
            "ecosystem": "pypi"
          },
          {
            "name": "certifi",
            "direct": false,
            "version": "2026.2.25",
            "ecosystem": "pypi"
          },
          {
            "name": "cffi",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "cfgv",
            "direct": false,
            "version": "3.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "charset-normalizer",
            "direct": false,
            "version": "3.4.5",
            "ecosystem": "pypi"
          },
          {
            "name": "click",
            "direct": false,
            "version": "8.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "cloudpickle",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "colorama",
            "direct": false,
            "version": "0.4.6",
            "ecosystem": "pypi"
          },
          {
            "name": "colorlog",
            "direct": false,
            "version": "6.10.1",
            "ecosystem": "pypi"
          },
          {
            "name": "comm",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "pypi"
          },
          {
            "name": "configspace",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "pypi"
          },
          {
            "name": "contourpy",
            "direct": false,
            "version": "1.3.3",
            "ecosystem": "pypi"
          },
          {
            "name": "coverage",
            "direct": false,
            "version": "7.13.4",
            "ecosystem": "pypi"
          },
          {
            "name": "cycler",
            "direct": false,
            "version": "0.12.1",
            "ecosystem": "pypi"
          },
          {
            "name": "dask",
            "direct": false,
            "version": "2026.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "dask-jobqueue",
            "direct": false,
            "version": "0.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "debugpy",
            "direct": false,
            "version": "1.8.20",
            "ecosystem": "pypi"
          },
          {
            "name": "decorator",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "defusedxml",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "distlib",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "distributed",
            "direct": false,
            "version": "2026.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "distro",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "docutils",
            "direct": false,
            "version": "0.22.4",
            "ecosystem": "pypi"
          },
          {
            "name": "einops",
            "direct": false,
            "version": "0.8.2",
            "ecosystem": "pypi"
          },
          {
            "name": "emcee",
            "direct": false,
            "version": "3.1.6",
            "ecosystem": "pypi"
          },
          {
            "name": "eval-type-backport",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "execnet",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "executing",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "fastjsonschema",
            "direct": false,
            "version": "2.21.2",
            "ecosystem": "pypi"
          },
          {
            "name": "filelock",
            "direct": false,
            "version": "3.25.2",
            "ecosystem": "pypi"
          },
          {
            "name": "flatbuffers",
            "direct": false,
            "version": "25.12.19",
            "ecosystem": "pypi"
          },
          {
            "name": "fonttools",
            "direct": false,
            "version": "4.62.0",
            "ecosystem": "pypi"
          },
          {
            "name": "fqdn",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "fsspec",
            "direct": false,
            "version": "2026.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "furo",
            "direct": false,
            "version": "2025.12.19",
            "ecosystem": "pypi"
          },
          {
            "name": "galois",
            "direct": false,
            "version": "0.4.10",
            "ecosystem": "pypi"
          },
          {
            "name": "gast",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "google-pasta",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "gpytorch",
            "direct": false,
            "version": "1.14",
            "ecosystem": "pypi"
          },
          {
            "name": "graphviz",
            "direct": false,
            "version": "0.21",
            "ecosystem": "pypi"
          },
          {
            "name": "greenlet",
            "direct": false,
            "version": "3.5.3",
            "ecosystem": "pypi"
          },
          {
            "name": "grpcio",
            "direct": false,
            "version": "1.78.0",
            "ecosystem": "pypi"
          },
          {
            "name": "h11",
            "direct": false,
            "version": "0.16.0",
            "ecosystem": "pypi"
          },
          {
            "name": "h5py",
            "direct": false,
            "version": "3.14.0",
            "ecosystem": "pypi"
          },
          {
            "name": "hf-xet",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "httpcore",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "pypi"
          },
          {
            "name": "httpx",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "pypi"
          },
          {
            "name": "huggingface-hub",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "identify",
            "direct": false,
            "version": "2.6.17",
            "ecosystem": "pypi"
          },
          {
            "name": "idna",
            "direct": false,
            "version": "3.11",
            "ecosystem": "pypi"
          },
          {
            "name": "imageio",
            "direct": false,
            "version": "2.37.3",
            "ecosystem": "pypi"
          },
          {
            "name": "imagesize",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "iniconfig",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ipykernel",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ipython",
            "direct": false,
            "version": "9.11.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ipython-pygments-lexers",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "ipywidgets",
            "direct": false,
            "version": "8.1.8",
            "ecosystem": "pypi"
          },
          {
            "name": "isoduration",
            "direct": false,
            "version": "20.11.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jaxtyping",
            "direct": false,
            "version": "0.3.11",
            "ecosystem": "pypi"
          },
          {
            "name": "jedi",
            "direct": false,
            "version": "0.19.2",
            "ecosystem": "pypi"
          },
          {
            "name": "jinja2",
            "direct": false,
            "version": "3.1.6",
            "ecosystem": "pypi"
          },
          {
            "name": "json5",
            "direct": false,
            "version": "0.13.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonpointer",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonschema",
            "direct": false,
            "version": "4.26.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonschema-specifications",
            "direct": false,
            "version": "2025.9.1",
            "ecosystem": "pypi"
          },
          {
            "name": "jupyter-client",
            "direct": false,
            "version": "8.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jupyter-core",
            "direct": false,
            "version": "5.9.1",
            "ecosystem": "pypi"
          },
          {
            "name": "jupyter-events",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jupyter-lsp",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jupyter-server",
            "direct": false,
            "version": "2.17.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jupyter-server-terminals",
            "direct": false,
            "version": "0.5.4",
            "ecosystem": "pypi"
          },
          {
            "name": "jupyterlab",
            "direct": false,
            "version": "4.5.6",
            "ecosystem": "pypi"
          },
          {
            "name": "jupyterlab-pygments",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jupyterlab-server",
            "direct": false,
            "version": "2.28.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jupyterlab-widgets",
            "direct": false,
            "version": "3.0.16",
            "ecosystem": "pypi"
          },
          {
            "name": "keras",
            "direct": false,
            "version": "3.13.2",
            "ecosystem": "pypi"
          },
          {
            "name": "kiwisolver",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "lark",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "latexcodec",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "lazy-loader",
            "direct": false,
            "version": "0.5",
            "ecosystem": "pypi"
          },
          {
            "name": "libclang",
            "direct": false,
            "version": "18.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "lightgbm",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "linear-operator",
            "direct": false,
            "version": "0.6",
            "ecosystem": "pypi"
          },
          {
            "name": "llvmlite",
            "direct": false,
            "version": "0.46.0",
            "ecosystem": "pypi"
          },
          {
            "name": "locket",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mako",
            "direct": false,
            "version": "1.3.12",
            "ecosystem": "pypi"
          },
          {
            "name": "markdown-it-py",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "markupsafe",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "matplotlib-inline",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "mdit-py-plugins",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mdurl",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "mistune",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ml-dtypes",
            "direct": false,
            "version": "0.5.4",
            "ecosystem": "pypi"
          },
          {
            "name": "more-itertools",
            "direct": false,
            "version": "11.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mpmath",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "msgpack",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "multipledispatch",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mypy-extensions",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "myst-parser",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "namex",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "narwhals",
            "direct": false,
            "version": "2.21.0",
            "ecosystem": "pypi"
          },
          {
            "name": "nbclient",
            "direct": false,
            "version": "0.10.4",
            "ecosystem": "pypi"
          },
          {
            "name": "nbconvert",
            "direct": false,
            "version": "7.17.0",
            "ecosystem": "pypi"
          },
          {
            "name": "nbformat",
            "direct": false,
            "version": "5.10.4",
            "ecosystem": "pypi"
          },
          {
            "name": "nest-asyncio",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "nodeenv",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "notebook",
            "direct": false,
            "version": "7.5.5",
            "ecosystem": "pypi"
          },
          {
            "name": "notebook-shim",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "pypi"
          },
          {
            "name": "numba",
            "direct": false,
            "version": "0.64.0",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cublas-cu12",
            "direct": false,
            "version": "12.8.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cuda-cupti-cu12",
            "direct": false,
            "version": "12.8.90",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cuda-nvrtc-cu12",
            "direct": false,
            "version": "12.8.93",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cuda-runtime-cu12",
            "direct": false,
            "version": "12.8.90",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cudnn-cu12",
            "direct": false,
            "version": "9.10.2.21",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cufft-cu12",
            "direct": false,
            "version": "11.3.3.83",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cufile-cu12",
            "direct": false,
            "version": "1.13.1.3",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-curand-cu12",
            "direct": false,
            "version": "10.3.9.90",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cusolver-cu12",
            "direct": false,
            "version": "11.7.3.90",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cusparse-cu12",
            "direct": false,
            "version": "12.5.8.93",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cusparselt-cu12",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-ml-py",
            "direct": false,
            "version": "13.590.48",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-nccl-cu12",
            "direct": false,
            "version": "2.27.5",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-nvjitlink-cu12",
            "direct": false,
            "version": "12.8.93",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-nvshmem-cu12",
            "direct": false,
            "version": "3.3.20",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-nvtx-cu12",
            "direct": false,
            "version": "12.8.90",
            "ecosystem": "pypi"
          },
          {
            "name": "opt-einsum",
            "direct": false,
            "version": "3.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "optree",
            "direct": false,
            "version": "0.19.0",
            "ecosystem": "pypi"
          },
          {
            "name": "optuna",
            "direct": false,
            "version": "4.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "packaging",
            "direct": false,
            "version": "26.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pandocfilters",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "parso",
            "direct": false,
            "version": "0.8.6",
            "ecosystem": "pypi"
          },
          {
            "name": "partd",
            "direct": false,
            "version": "1.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pexpect",
            "direct": false,
            "version": "4.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "platformdirs",
            "direct": false,
            "version": "4.9.4",
            "ecosystem": "pypi"
          },
          {
            "name": "plotly",
            "direct": false,
            "version": "6.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pluggy",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "posthog",
            "direct": false,
            "version": "7.9.12",
            "ecosystem": "pypi"
          },
          {
            "name": "pre-commit",
            "direct": false,
            "version": "4.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "prometheus-client",
            "direct": false,
            "version": "0.24.1",
            "ecosystem": "pypi"
          },
          {
            "name": "prompt-toolkit",
            "direct": false,
            "version": "3.0.52",
            "ecosystem": "pypi"
          },
          {
            "name": "protobuf",
            "direct": false,
            "version": "7.34.0",
            "ecosystem": "pypi"
          },
          {
            "name": "psutil",
            "direct": false,
            "version": "7.2.2",
            "ecosystem": "pypi"
          },
          {
            "name": "ptyprocess",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pure-eval",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pybtex",
            "direct": false,
            "version": "0.25.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pybtex-docutils",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pycparser",
            "direct": false,
            "version": "3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic",
            "direct": false,
            "version": "2.12.5",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic-core",
            "direct": false,
            "version": "2.41.5",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic-settings",
            "direct": false,
            "version": "2.13.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pygments",
            "direct": false,
            "version": "2.19.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pynisher",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "pypi"
          },
          {
            "name": "pyparsing",
            "direct": false,
            "version": "3.3.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pyre-extensions",
            "direct": false,
            "version": "0.0.32",
            "ecosystem": "pypi"
          },
          {
            "name": "pyro-api",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pyro-ppl",
            "direct": false,
            "version": "1.9.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest",
            "direct": false,
            "version": "9.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-cov",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-xdist",
            "direct": false,
            "version": "3.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "python-dateutil",
            "direct": false,
            "version": "2.9.0.post0",
            "ecosystem": "pypi"
          },
          {
            "name": "python-discovery",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "pypi"
          },
          {
            "name": "python-dotenv",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "pypi"
          },
          {
            "name": "python-json-logger",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pywin32",
            "direct": false,
            "version": "312",
            "ecosystem": "pypi"
          },
          {
            "name": "pywinpty",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pyyaml",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pyzmq",
            "direct": false,
            "version": "27.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "referencing",
            "direct": false,
            "version": "0.37.0",
            "ecosystem": "pypi"
          },
          {
            "name": "regex",
            "direct": false,
            "version": "2026.2.28",
            "ecosystem": "pypi"
          },
          {
            "name": "rfc3339-validator",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "pypi"
          },
          {
            "name": "rfc3986-validator",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "rfc3987-syntax",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "rich",
            "direct": false,
            "version": "14.3.3",
            "ecosystem": "pypi"
          },
          {
            "name": "roman-numerals",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "rpds-py",
            "direct": false,
            "version": "0.30.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ruff",
            "direct": false,
            "version": "0.15.5",
            "ecosystem": "pypi"
          },
          {
            "name": "safetensors",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "scikit-image",
            "direct": false,
            "version": "0.26.0",
            "ecosystem": "pypi"
          },
          {
            "name": "send2trash",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "setuptools",
            "direct": false,
            "version": "82.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "shellingham",
            "direct": false,
            "version": "1.5.4",
            "ecosystem": "pypi"
          },
          {
            "name": "six",
            "direct": false,
            "version": "1.17.0",
            "ecosystem": "pypi"
          },
          {
            "name": "smac",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "snowballstemmer",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "sortedcontainers",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "soupsieve",
            "direct": false,
            "version": "2.8.3",
            "ecosystem": "pypi"
          },
          {
            "name": "sparse-transform",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinx",
            "direct": false,
            "version": "9.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinx-autodoc-typehints",
            "direct": false,
            "version": "3.9.8",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinx-basic-ng",
            "direct": false,
            "version": "1.0.0b2",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinx-copybutton",
            "direct": false,
            "version": "0.5.2",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinx-gallery",
            "direct": false,
            "version": "0.20.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-applehelp",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-bibtex",
            "direct": false,
            "version": "2.6.5",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-devhelp",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-htmlhelp",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-jsmath",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-qthelp",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-serializinghtml",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sqlalchemy",
            "direct": false,
            "version": "2.0.51",
            "ecosystem": "pypi"
          },
          {
            "name": "stack-data",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "pypi"
          },
          {
            "name": "sympy",
            "direct": false,
            "version": "1.14.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tabpfn",
            "direct": false,
            "version": "6.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "tabpfn-common-utils",
            "direct": false,
            "version": "0.2.18",
            "ecosystem": "pypi"
          },
          {
            "name": "tblib",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "pypi"
          },
          {
            "name": "tensorflow",
            "direct": false,
            "version": "2.21.0",
            "ecosystem": "pypi"
          },
          {
            "name": "termcolor",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "terminado",
            "direct": false,
            "version": "0.18.1",
            "ecosystem": "pypi"
          },
          {
            "name": "tf-keras",
            "direct": false,
            "version": "2.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "threadpoolctl",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tifffile",
            "direct": false,
            "version": "2026.3.3",
            "ecosystem": "pypi"
          },
          {
            "name": "tinycss2",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tokenizers",
            "direct": false,
            "version": "0.22.2",
            "ecosystem": "pypi"
          },
          {
            "name": "toolz",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "torch",
            "direct": false,
            "version": "2.9.1",
            "ecosystem": "pypi"
          },
          {
            "name": "torchvision",
            "direct": false,
            "version": "0.24.1",
            "ecosystem": "pypi"
          },
          {
            "name": "tornado",
            "direct": false,
            "version": "6.5.5",
            "ecosystem": "pypi"
          },
          {
            "name": "traitlets",
            "direct": false,
            "version": "5.14.3",
            "ecosystem": "pypi"
          },
          {
            "name": "transformers",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "triton",
            "direct": false,
            "version": "3.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "ty",
            "direct": false,
            "version": "0.0.21",
            "ecosystem": "pypi"
          },
          {
            "name": "typer",
            "direct": false,
            "version": "0.24.1",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-extensions",
            "direct": false,
            "version": "4.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-inspect",
            "direct": false,
            "version": "0.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-inspection",
            "direct": false,
            "version": "0.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "tzdata",
            "direct": false,
            "version": "2025.3",
            "ecosystem": "pypi"
          },
          {
            "name": "uri-template",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "urllib3",
            "direct": false,
            "version": "2.6.3",
            "ecosystem": "pypi"
          },
          {
            "name": "virtualenv",
            "direct": false,
            "version": "21.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "wadler-lindig",
            "direct": false,
            "version": "0.1.7",
            "ecosystem": "pypi"
          },
          {
            "name": "wcwidth",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "webcolors",
            "direct": false,
            "version": "25.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "webencodings",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "websocket-client",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "wheel",
            "direct": false,
            "version": "0.46.3",
            "ecosystem": "pypi"
          },
          {
            "name": "widgetsnbextension",
            "direct": false,
            "version": "4.0.15",
            "ecosystem": "pypi"
          },
          {
            "name": "wrapt",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "xgboost",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "zict",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 270,
        "direct_count": 11,
        "indirect_count": 259
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 7,
        "merged_prs": 252,
        "open_issues": 24,
        "closed_ratio": 0.903,
        "closed_issues": 224,
        "closed_unmerged_prs": 49
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "mmschlk",
          "commits": 730,
          "avatar_url": "https://avatars.githubusercontent.com/u/45100845?v=4"
        },
        {
          "type": "User",
          "login": "FFmgll",
          "commits": 81,
          "avatar_url": "https://avatars.githubusercontent.com/u/93938607?v=4"
        },
        {
          "type": "User",
          "login": "hbaniecki",
          "commits": 77,
          "avatar_url": "https://avatars.githubusercontent.com/u/32574004?v=4"
        },
        {
          "type": "User",
          "login": "Advueu963",
          "commits": 68,
          "avatar_url": "https://avatars.githubusercontent.com/u/49311372?v=4"
        },
        {
          "type": "User",
          "login": "IsaH57",
          "commits": 16,
          "avatar_url": "https://avatars.githubusercontent.com/u/73071602?v=4"
        },
        {
          "type": "User",
          "login": "kolpaczki",
          "commits": 15,
          "avatar_url": "https://avatars.githubusercontent.com/u/81803298?v=4"
        },
        {
          "type": "User",
          "login": "milanagm",
          "commits": 12,
          "avatar_url": "https://avatars.githubusercontent.com/u/121519865?v=4"
        },
        {
          "type": "User",
          "login": "landonbutler",
          "commits": 9,
          "avatar_url": "https://avatars.githubusercontent.com/u/48364057?v=4"
        },
        {
          "type": "User",
          "login": "Zaphoood",
          "commits": 5,
          "avatar_url": "https://avatars.githubusercontent.com/u/83180705?v=4"
        },
        {
          "type": "User",
          "login": "pwhofman",
          "commits": 5,
          "avatar_url": "https://avatars.githubusercontent.com/u/36850933?v=4"
        }
      ],
      "contributors_sampled": 24,
      "top_contributor_share": 0.705
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "build.yml",
        "ci.yml",
        "python-publish.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": true
    },
    "security_signals": {
      "lockfiles": [
        "uv.lock"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 5,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 8,
            "reason": "22 out of 27 merged PRs checked by a CI test -- score normalized to 8",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 7,
            "reason": "Found 20/26 approved changesets -- score normalized to 7",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 10 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "24 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "77 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "12ec2878fb61b94c01a8c1260a18108eac165538",
        "ran_at": "2026-07-26T23:06:08Z",
        "aggregate_score": 5.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-21T14:32:32Z",
      "oldest_open_prs": [
        {
          "number": 524,
          "created_at": "2026-05-22T13:19:51Z",
          "last_comment_at": "2026-07-17T17:52:07Z",
          "last_comment_author": "FabianK-Dev"
        },
        {
          "number": 543,
          "created_at": "2026-06-10T09:54:48Z",
          "last_comment_at": "2026-07-08T12:53:08Z",
          "last_comment_author": "Gength"
        },
        {
          "number": 549,
          "created_at": "2026-06-12T15:45:42Z",
          "last_comment_at": "2026-07-17T21:37:52Z",
          "last_comment_author": "t-muras"
        },
        {
          "number": 550,
          "created_at": "2026-06-16T02:29:41Z",
          "last_comment_at": "2026-07-14T08:50:17Z",
          "last_comment_author": "mmschlk"
        },
        {
          "number": 551,
          "created_at": "2026-06-16T11:40:53Z",
          "last_comment_at": "2026-07-06T08:32:46Z",
          "last_comment_author": "mmschlk"
        },
        {
          "number": 557,
          "created_at": "2026-06-28T14:35:01Z",
          "last_comment_at": "2026-07-21T15:02:53Z",
          "last_comment_author": "samoger"
        },
        {
          "number": 559,
          "created_at": "2026-06-30T17:34:49Z",
          "last_comment_at": "2026-07-16T18:48:47Z",
          "last_comment_author": "ThrashLion"
        }
      ],
      "last_merged_pr_at": "2026-07-21T14:14:32Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 186,
          "created_at": "2024-08-16T17:30:29Z",
          "last_comment_at": "2024-10-18T15:14:14Z",
          "last_comment_author": "mmschlk"
        },
        {
          "number": 187,
          "created_at": "2024-08-16T17:48:12Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 195,
          "created_at": "2024-08-19T19:15:45Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 225,
          "created_at": "2024-08-27T09:28:21Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 306,
          "created_at": "2025-01-20T19:23:04Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 320,
          "created_at": "2025-02-14T19:19:57Z",
          "last_comment_at": "2025-04-02T09:06:59Z",
          "last_comment_author": "mmschlk"
        },
        {
          "number": 347,
          "created_at": "2025-03-21T12:10:26Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 358,
          "created_at": "2025-03-27T19:49:33Z",
          "last_comment_at": "2026-06-01T15:39:00Z",
          "last_comment_author": "satyrmipt"
        },
        {
          "number": 368,
          "created_at": "2025-04-02T20:20:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 390,
          "created_at": "2025-05-26T11:44:42Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 393,
          "created_at": "2025-05-30T18:31:24Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 434,
          "created_at": "2025-09-09T08:18:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 439,
          "created_at": "2025-09-17T13:41:38Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 451,
          "created_at": "2025-10-16T16:14:41Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 454,
          "created_at": "2025-10-24T08:06:55Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 459,
          "created_at": "2025-10-29T10:09:27Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 466,
          "created_at": "2025-11-04T18:58:14Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 473,
          "created_at": "2025-11-06T18:53:35Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 474,
          "created_at": "2025-11-06T19:32:52Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 477,
          "created_at": "2025-11-18T14:52:59Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/mmschlk/shapiq",
    "host": "github.com",
    "name": "shapiq",
    "owner": "mmschlk"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 78,
      "inputs": {
        "security": 64,
        "vitality": 88,
        "community": 79,
        "governance": 66,
        "engineering": 94
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 88,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 86,
            "inputs": {
              "commits_last_year": 158,
              "human_commit_share": 0.87,
              "days_since_last_push": 2,
              "active_weeks_last_year": 32
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 2 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "32/52 weeks with commits",
                "points": 22.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 32
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "158 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 158
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "24 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 92,
            "inputs": {
              "releases_count": 22,
              "latest_release_tag": "v1.6.0",
              "releases_from_tags": false,
              "days_since_latest_release": 20,
              "mean_days_between_releases": 52.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "22 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 22
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 20 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 20
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~52.1 days",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 52.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 20,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 20 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 20
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 79,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 67,
            "inputs": {
              "forks": 68,
              "stars": 762,
              "watchers": 10,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "762 stars",
                "points": 46.7,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 762
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "68 forks",
                "points": 15.2,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 68
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "10 watchers",
                "points": 5.3,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 66,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 39,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 24,
              "top_contributor_share": 0.705
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 70% of commits",
                "points": 6.6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 70
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "24 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 24
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 10 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "excellent",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "merged_prs": 252,
              "open_issues": 24,
              "closed_issues": 224,
              "issue_closed_ratio": 0.903,
              "closed_unmerged_prs": 49
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "90% of issues closed",
                "points": 42.2,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 90
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "252/301 decided PRs merged",
                "points": 32,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 252,
                      "decided": 301
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 20/26 approved changesets -- score normalized to 7",
                "points": 10.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 53,
            "inputs": {
              "followers": 55,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "mmschlk",
              "public_repos": 11,
              "account_age_days": 2809
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "55 followers of mmschlk",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 55,
                      "login": "mmschlk"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "11 public repos, account ~7 yr old",
                "points": 19.9,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 11
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 7
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "shapiq"
              ],
              "ecosystems": "pypi",
              "any_deprecated": false,
              "min_days_since_publish": 20
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 20 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 20
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "23 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 23
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "excellent",
        "name": "Engineering Quality",
        "value": 94,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": true
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 16,
                "status": "met",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 9.6,
                "status": "met",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "22 out of 27 merged PRs checked by a CI test -- score normalized to 8",
                "points": 16,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "python",
                "feature-interactions",
                "explainability",
                "interpretability",
                "machine-learning",
                "shap",
                "shapley",
                "shapiq",
                "shapley-interactions",
                "banzhaf-index",
                "explainable-ai",
                "feature-importance",
                "game-theory",
                "interpretable-machine-learning",
                "feature-attribution"
              ],
              "has_wiki": true,
              "homepage": "https://shapiq.readthedocs.io",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://shapiq.readthedocs.io",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "15 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 15
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 64,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 55,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 5.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 3.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "22 out of 27 merged PRs checked by a CI test -- score normalized to 8",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 20/26 approved changesets -- score normalized to 7",
                "points": 5.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 10 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "24 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "77 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the pypi:shapiq@1.6.0 runtime dependency closure — what installing the published package pulls in — 25 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "pypi:shapiq@1.6.0",
                  "assessed": 25
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 25,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 25,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 7
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 78,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "good",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.609,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 937
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "53 of 87 human commits state their intent (structured subject or explanatory body)",
                "points": 32.5,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 53,
                      "sampled": 87
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "excellent",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "uv.lock"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [
                "docs/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "src/shapiq/py.typed"
              ],
              "agent_commit_share": 0.12,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.13
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "docs/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "docs/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 11,
                "status": "met",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "src/shapiq/py.typed",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "src/shapiq/py.typed"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "12 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 12,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "13 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 13,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "primary_language": "Python",
              "largest_source_bytes": 96625,
              "source_files_sampled": 361,
              "oversized_source_files": 2
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Python with type-check config (src/shapiq/py.typed)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "src/shapiq/py.typed",
                      "language": "Python"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "2/361 source files over 60KB",
                "points": 54.7,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 361,
                      "oversized": 2
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T23:06:36.595632Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/m/mmschlk/shapiq.svg",
  "full_name": "mmschlk/shapiq",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsPyPI.