Core FAIRsoft evaluation engine for research software metadata.
This package contains the reusable evaluation logic for FAIRsoft indicators and scores.
For local development:
pip install -e .To install directly from GitHub:
pip install "git+https://github.com/inab/fairsoft-core.git@v0.1.0"- computes FAIRsoft indicators
- computes FAIR scores
- generates feedback
- exposes a CLI for evaluation workflows
The core evaluator expects metadata already normalized to the internal FAIRsoft input model.
This means:
- the package does not prepare or enrich raw metadata
- the input JSON must already match the structure expected by the core
Instancemodel
Run a full FAIRsoft evaluation from a JSON file:
fairsoft evaluate path/to/metadata.jsonWrite output to a file:
fairsoft evaluate path/to/metadata.json --output result.jsonSelect only part of the evaluation output:
fairsoft evaluate path/to/metadata.json --select result
fairsoft evaluate path/to/metadata.json --select logs
fairsoft evaluate path/to/metadata.json --select feedbackChoose compact JSON output:
fairsoft evaluate path/to/metadata.json --select result --format json-compactList the indicators currently available in the CLI:
fairsoft indicator --listDescribe one indicator:
fairsoft indicator --describe F3_1
fairsoft indicator --describe searchability_in_registriesRun indicator F3_1 by ID:
fairsoft indicator F3_1 path/to/metadata.jsonRun the same indicator by name:
fairsoft indicator searchability_in_registries path/to/metadata.jsonSelect only the result or logs:
fairsoft indicator F3_1 path/to/metadata.json --select result
fairsoft indicator F3_1 path/to/metadata.json --select logsWrite compact output to a file:
fairsoft indicator F3_1 path/to/metadata.json --select logs --format json-compact --output f3_1_logs.json--select controls which part of the output is returned.
Available values:
fullresultlogsfeedback
For full evaluation, the returned structure contains:
resultlogsfeedback
For single-indicator commands, the CLI keeps the same output contract, although some indicators may return an empty feedback field.
--format controls serialization.
Available values:
jsonjson-compact
Examples:
fairsoft evaluate path/to/metadata.json --select full --format json
fairsoft evaluate path/to/metadata.json --select result --format json-compact
fairsoft indicator F3_1 path/to/metadata.json --select logs --format jsonNote. The “Equivalent CodeMeta fields” column reflects the current minimal adapter implemented in
fairsoft-core, not the full set of CodeMeta fields that could theoretically be mapped in future versions. Entries marked as “partially” indicate indirect or limited support.
| Indicator | Name | Fields used | Minimum metadata | Equivalent CodeMeta fields | Not applicable when |
|---|---|---|---|---|---|
| A1_1 | existence_of_api_or_web |
webpage, type |
webpage |
url, homepage |
super_type == 'no_web' |
| A1_2 | downloadable_and_buildable_working_version |
download, src, type |
download or src |
downloadUrl |
super_type == 'web' |
| A1_3 | installation_instructions |
inst_instr, documentation, source, type |
inst_instr or documentation or source |
readme, softwareHelp, documentation |
super_type == 'web' |
| A1_4 | test_data |
test, documentation, type |
test or documentation |
no direct minimal mapping | super_type == 'web' |
| A1_5 | source_code |
src, type |
src |
no direct minimal mapping (codeRepository is mapped to repository, not src) |
super_type == 'web' |
| A3_1 | registration_not_compulsory |
registration_not_mandatory |
registration_not_mandatory |
no direct minimal mapping | — |
| A3_2 | version_for_free_os |
os, type |
os |
operatingSystem |
super_type == 'web' |
| A3_3 | availability_for_several_os |
os, type |
os |
operatingSystem |
super_type == 'web' |
| A3_4 | availability_on_free_e_infrastructures |
e_infrastructures, webpage, source, type |
e_infrastructures or webpage or source |
partially url, homepage, sameAs, relatedLink |
super_type == 'web' |
| A3_5 | availability_on_several_e_infrastructures |
e_infrastructures, webpage, source, type |
e_infrastructures or webpage or source |
partially url, homepage, sameAs, relatedLink |
super_type == 'web' |
| F1_2 | semantic_versioning |
version |
version |
softwareVersion, version |
— |
| F2_1 | structured_metadata |
source |
source |
no direct minimal mapping | — |
| F2_2 | metadata_with_controlled_vocabularies |
topics, operations |
topics or operations |
partially applicationCategory |
— |
| F3_1 | searchability_in_registries |
source, registries |
source or registries |
no direct minimal mapping | — |
| F3_2 | searchability_in_software_repositories |
repository |
repository |
codeRepository |
— |
| F3_3 | searchability_in_literature |
publication |
publication |
citation, referencePublication |
— |
| I1_1 | standard_data_formats |
input, output |
input or output |
no direct minimal mapping | — |
| I1_2 | api_standard_specification |
documentation, type |
documentation |
documentation, softwareHelp, readme |
super_type == 'no_web' |
| I1_3 | verifiable_data_formats |
input, output |
input or output |
no direct minimal mapping | — |
| I1_4 | flexibility_of_supported_data_formats |
input, output |
input and output |
no direct minimal mapping | — |
| I2_1 | api_or_library_version |
type |
type |
no direct minimal mapping | — |
| I2_2 | e_infrastructure_compatibility |
e_infrastructures, webpage, source |
e_infrastructures or webpage or source |
partially url, homepage, sameAs, relatedLink |
— |
| I3_1 | dependencies_statement |
dependencies |
dependencies |
no direct minimal mapping | — |
| I3_2 | dependencies_provided |
source, registries, links |
source or registries or links |
partially sameAs, relatedLink |
— |
| I3_3 | dependency_aware_system |
source, registries, links |
source or registries or links |
partially sameAs, relatedLink |
— |
| R1_1 | usage_guides |
documentation |
documentation |
readme, softwareHelp, documentation |
— |
| R2_1 | license |
license, documentation |
license or documentation |
license, partially documentation |
— |
| R2_2 | technical_conditions_of_use |
license, documentation |
license or documentation |
license, partially documentation |
— |
| R3_1 | contribution_policy |
documentation |
documentation |
documentation, readme, softwareHelp |
— |
| R3_2 | credit |
authors |
authors |
author, contributor, maintainer |
— |
| R4_1 | public_version_control |
version_control |
version_control |
no direct minimal mapping (codeRepository suggests it, but the adapter does not infer version_control) |
— |
| R4_2 | release_policy |
documentation |
documentation |
documentation, readme, softwareHelp |
— |
Run a full FAIRsoft evaluation programmatically:
from fairsoft_core.evaluation import run_fairsoft_evaluation
result = run_fairsoft_evaluation(tool_metadata)The CLI uses the following exit codes:
0: success1: unexpected error2: input error or invalid CLI usage3: evaluation error4: input file not found5: command not implemented
A common local workflow is:
ruff check . --fix
ruff format .
pytestKeep the pyproject.toml as the source of truth of the version.
There is pre-push hook that run all tests.