somef

SOftware Metadata Extraction Framework: A tool for automatically extracting relevant software information from readme files

https://github.com/knowledgecaptureanddiscovery/somef

Science Score: 77.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 6 DOI reference(s) in README
  • Academic publication links
    Links to: zenodo.org
  • Committers with academic emails
    4 of 21 committers (19.0%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (17.1%) to scientific vocabulary

Keywords

codemeta extraction metadata readme software
Last synced: 6 months ago · JSON representation ·

Repository

SOftware Metadata Extraction Framework: A tool for automatically extracting relevant software information from readme files

Basic Info
Statistics
  • Stars: 62
  • Watchers: 6
  • Forks: 27
  • Open Issues: 116
  • Releases: 29
Topics
codemeta extraction metadata readme software
Created over 6 years ago · Last pushed 8 months ago
Metadata Files
Readme License Citation Codemeta

README.md

Software Metadata Extraction Framework (SOMEF)

Documentation Status Python PyPI DOI Binder Project Status: Active – The project has reached a stable, usable state and is being actively developed.

logo

A command line interface for automatically extracting relevant metadata from code repositories (readme, configuration files, documentation, etc.).

Demo: See a demo running somef as a service, through the SOMEF-Vider tool.

Authors: Daniel Garijo, Allen Mao, Miguel Ángel García Delgado, Haripriya Dharmala, Vedant Diwanji, Jiaying Wang, Aidan Kelley, Jenifer Tabita Ciuciu-Kiss, Luca Angheluta and Juanje Mendoza.

Features

Given a readme file (or a GitHub/Gitlab repository) SOMEF will extract the following categories (if present), listed in alphabetical order:

  • Acknowledgement: Text acknowledging funding sources or contributors
  • Application domain: The application domain of the repository. Current supported domains include: Astrophysics, Audio, Computer vision, Graphs, Natural language processing, Reinforcement learning, Semantc web, Sequential. Domains are not mutually exclusive. These domains have been extracted from awesome lists and Papers with code. Find more information in our documentation
  • Authors: Person(s) or organization(s) responsible for the project. We recognize the following properties:
    • Name: name of the author (including last name)
    • Given name: First name of an author
    • Family name: Last name of an author
    • Email: email of author
    • URL: website or ORCID associated with the author
  • Build file: Build file(s) of the project. For example, files used to create a Docker image for the target software, package files, etc.
  • Citation: Preferred citation as the authors have stated in their readme file. SOMEF recognizes Bibtex, Citation File Format files and other means by which authors cite their papers (e.g., by in-text citation). We aim to recognize the following properties:
    • Title: Title of the publication
    • Author: list of author names in the publication
    • URL: URL of the publication
    • DOI: Digital object identifier of the publication
    • Date published
  • Code of conduct: Link to the code of conduct of the project
  • Code repository: Link to the GitHub/GitLab repository used for the extraction
  • Contact: Contact person responsible for maintaining a software component
  • Continuous integration: Link to continuous integration service(s)
  • Contribution guidelines: Text indicating how to contribute to this code repository
  • Contributors: Contributors to a software component
  • Creation date: Date when the repository was created
  • Date updated: Date of last release.
  • Description: A description of what the software does
  • Documentation: Where to find additional documentation about a software component
  • Download URL: URL where to download the target software (typically the installer, package or a tarball to a stable version)
  • Executable examples: Jupyter notebooks ready for execution (e.g., files, or through myBinder/colab links)
  • FAQ: Frequently asked questions about a software component
  • Forks count: Number of forks of the project
  • Forks url: Links to forks made of the project
  • Full name: Name + owner (owner/name)
  • Full title: If the repository is a short name, we will attempt to extract the longer version of the repository name
  • Identifier: Identifier associated with the software (if any), such as Digital Object Identifiers. DOIs associated with publications will also be detected.
  • Images: Images used to illustrate the software component
  • Installation instructions: A set of instructions that indicate how to install a target repository
  • Invocation: Execution command(s) needed to run a scientific software component
  • Issue tracker: Link where to open issues for the target repository
  • Keywords: set of terms used to commonly identify a software component
  • License: License and usage terms of a software component
  • Logo: Main logo used to represent the target software component
  • Name: Name identifying a software component
  • Ontologies: URL and path to the ontology files present in the repository
  • Owner: Name and type of the user or organization in charge of the repository
  • Package distribution: Links to package sites like pypi in case the repository has a package available.
  • Package files: Links to package files used to wrap the project in a package.
  • Programming languages: Languages used in the repository
  • Related papers: URL to possible related papers within the repository stated within the readme file (from Arxiv)
  • Releases (GitHub only): Pointer to the available versions of a software component. For each release, somef will track the following properties:
    • Description: Release notes
    • Author: Agent responsible of creating the release
    • Name: Name of the release
    • Tag: version number of the release
    • Date of publication
    • Date of creation
    • Link to the html page of the release
    • Id of the release
    • Link to the tarball zip and code of the release
  • Repository status: Repository status as it is described in repostatus.org.
  • Requirements: Pre-requisites and dependencies needed to execute a software component
  • Run: Running instructions of a software component. It may be wider than the invocation category, as it may include several steps and explanations.
  • Script files: Bash script files contained in the repository
  • Stargazers count: Total number of stargazers of the project
  • Support: Guidelines and links of where to obtain support for a software component
  • Support channels: Help channels one can use to get support about the target software component
  • Type: type of software (command line application, notebook, ontology, scientific workflow, etc.)
  • Usage examples: Assumptions and considerations recorded by the authors when executing a software component, or examples on how to use it
  • Workflows: URL and path to the computational workflow files present in the repository

We use different supervised classifiers, header analysis, regular expressions, the GitHub/Gitlab API to retrieve all these fields (more than one technique may be used for each field) and language specific metadata parsers (e.g., for package files). Each extraction records its provenance, with the confidence and technique used on each step. For more information check the output format description

Documentation

See full documentation at https://somef.readthedocs.io/en/latest/

Cite SOMEF:

Journal publication (preferred):

@article{10.1162/qss_a_00167, author = {Kelley, Aidan and Garijo, Daniel}, title = "{A Framework for Creating Knowledge Graphs of Scientific Software Metadata}", journal = {Quantitative Science Studies}, pages = {1-37}, year = {2021}, month = {11}, issn = {2641-3337}, doi = {10.1162/qss_a_00167}, url = {https://doi.org/10.1162/qss_a_00167}, eprint = {https://direct.mit.edu/qss/article-pdf/doi/10.1162/qss\_a\_00167/1971225/qss\_a\_00167.pdf}, }

Conference publication (first):

@INPROCEEDINGS{9006447, author={A. {Mao} and D. {Garijo} and S. {Fakhraei}}, booktitle={2019 IEEE International Conference on Big Data (Big Data)}, title={SoMEF: A Framework for Capturing Scientific Software Metadata from its Documentation}, year={2019}, doi={10.1109/BigData47090.2019.9006447}, url={http://dgarijo.com/papers/SoMEF.pdf}, pages={3032-3037} }

Requirements

  • Python 3.9 or Python 3.10 (default version support)

SOMEF has been tested on Unix, MacOS and Windows Microsoft operating systems.

If you face any issues when installing SOMEF, please make sure you have installed the following packages: build-essential, libssl-dev, libffi-dev and python3-dev.

Install from Pypi

SOMEF is available in Pypi! To install it just type:

pip install somef

Install from GitHub

To run SOMEF, please follow the next steps:

Clone this GitHub repository

git clone https://github.com/KnowledgeCaptureAndDiscovery/somef.git

We use Poetry to ensure library compatibility. It can be installed as follows:

curl -sSL https://install.python-poetry.org | python3 -

This option is recommended over installing Poetry with pip install.

Now Poetry will handle the installation of SOMEF and all its dependencies configured in the toml file.

To test the correct installation of poetry run:

poetry --version

Install somef and all their dependencies.

cd /somef poetry install

Now we need to access our virtual environment, to do so you have to install the poetry plugin shell and run the following command:

pip install poetry-plugin-shell After shell is set up, you can run the following comand to access the virtual environment poetry shell Test SOMEF installation

bash somef --help

If everything goes fine, you should see:

```bash Usage: somef [OPTIONS] COMMAND [ARGS]...

Options: -h, --help Show this message and exit.

Commands: configure Configure credentials describe Running the Command Line Interface version Show somef version. ```

Installing through Docker

We provide a Docker image with SOMEF already installed. To run through Docker, you may build the Dockerfile provided in the repository by running:

bash docker build -t somef .

Or just use the Docker image already built in DockerHub:

bash docker pull kcapd/somef

Then, to run your image just type:

bash docker run --rm -it kcapd/somef

And you will be ready to use SOMEF (see section below). If you want to have access to the results we recommend mounting a volume. For example, the following command will mount the current directory as the out folder in the Docker image:

bash docker run -it --rm -v $PWD/:/out kcapd/somef

If you move any files produced by somef into /out, then you will be able to see them in your current directory.

Configure

Before running SOMEF for the first time, you must configure it appropriately (you only need to do this once). Run:

bash somef configure

And you will be asked to provide the following:

If you want somef to be automatically configured (without GitHUb authentication key and using the default classifiers) just type:

bash somef configure -a

For showing help about the available options, run:

bash somef configure --help

Which displays:

```bash Usage: somef configure [OPTIONS]

Configure GitHub credentials and classifiers file path

Options: -a, --auto Automatically configure SOMEF -h, --help Show this message and exit. ```

Updating SOMEF

If you update SOMEF to a newer version, we recommend you configure again the library (by running somef configure). The rationale is that different versions may rely on classifiers which may be stored in a different path.

Usage

```bash $ somef describe --help SOMEF Command Line Interface Usage: somef describe [OPTIONS]

Running the Command Line Interface

Options: -t, --threshold FLOAT Threshold to classify the text [required] Input: [mutuallyexclusive, required] -r, --repourl URL Github/Gitlab Repository URL -d, --docsrc PATH Path to the README file source -i, --infile PATH A file of newline separated links to GitHub/ Gitlab repositories

Output: [required_any] -o, --output PATH Path to the output file. If supplied, the output will be in JSON

-c, --codemeta_out PATH       Path to an output codemeta file
-g, --graph_out PATH          Path to the output Knowledge Graph export
                              file. If supplied, the output will be a
                              Knowledge Graph, in the format given in the
                              --format option chosen (turtle, json-ld)

-f, --graphformat [turtle|json-ld] If the --graphout option is given, this is the format that the graph will be stored in

-p, --pretty Pretty print the JSON output file so that it is easy to compare to another JSON output file.

-m, --missing The JSON will include a field somefmissingcategories to report with the missing metadata fields that SOMEF was not able to find.

-kt, --keep_tmp PATH SOMEF will NOT delete the temporary folder where files are stored for analysis. Files will be stored at the desired path

-h, --help Show this message and exit. ```

Usage example:

The following command extracts all metadata available from https://github.com/dgarijo/Widoco/.

bash somef describe -r https://github.com/dgarijo/Widoco/ -o test.json -t 0.8

Try SOMEF in Binder with our sample notebook: Binder

Contribute:

If you want to contribute with a pull request, please do so by submitting it to the dev branch.

Next features:

To see upcoming features, please have a look at our open issues and milestones

Extending SOMEF categories:

To run a classifier with an additional category or remove an existing one, a corresponding path entry in the config.json should be provided and the category type should be added/removed in the category variable in cli.py.

Owner

  • Name: KnowledgeCaptureAndDiscovery
  • Login: KnowledgeCaptureAndDiscovery
  • Kind: organization

Knowdledge Capture and Discovery Group, at ISI (USC)

Citation (CITATION.cff)

title: "SOMEF: Software metadata extraction framework"
license: Apache-2.0
authors:
  - family-names: Garijo
    given-names: Daniel
    orcid: "http://orcid.org/0000-0003-0454-7145"
  - family-names: Mao
    given-names: Allen
  - family-names: Dharmala
    given-names: Haripriya
  - family-names: Diwanji
    given-names: Cedant
  - family-names: Wang
    given-names: Jiajing
  - family-names: Kelley
    given-names: Aidan
  - family-names: García
    given-names: Miguel Angel
  - family-names: Ciuciu-Kiss
    given-names: Jenifer
  - family-names: Mendoza
    given-names: Juanje
    
cff-version: 1.2.0
message: "If you use this software, please cite both the article from preferred-citation and the software itself."
preferred-citation:
  authors:
    - family-names: Kelley
      given-names: Aidan
    - family-names: Garijo
      given-names: Daniel
  title: "A Framework for Creating Knowledge Graphs of Scientific Software Metadata"
  type: article
  journal: "Quantitative Science Studies"
  pages: "1-37"
  year: 2021
  doi: 10.1162/qss_a_00167

CodeMeta (codemeta.json)

{
  "@context": "https://w3id.org/codemeta/3.0",
  "author": [
    {
      "affiliation": {
        "name": "Universidad Politcnica de Madrid",
        "@type": "Organization"
      },
      "email": "daniel.garijo@upm.es",
      "familyName": "Garijo",
      "givenName": "Daniel",
      "@id": "http://orcid.org/0000-0003-0454-7145",
      "@type": "Person"
    },
    {
      "familyName": "Mao",
      "givenName": "Allen",
      "@type": "Person"
    },
    {
      "familyName": "Dharmala",
      "givenName": "Haripriya",
      "@type": "Person"
    },
    {
      "familyName": "Diwanji",
      "givenName": "Vedant",
      "@type": "Person"
    },
    {
      "familyName": "Wang",
      "givenName": "Jiajing",
      "@type": "Person"
    },
    {
      "familyName": "Kelley",
      "givenName": "Aidan",
      "@type": "Person"
    },
    {
      "familyName": "Garca",
      "givenName": "Miguel Angel",
      "@id": "_:author_7",
      "@type": "Person"
    },
    {
      "familyName": "Ciu Ciu Kiss",
      "givenName": "Jenifer",
      "@type": "Person"
    },
    {
      "familyName": "Mendoza",
      "givenName": "Juanje",
      "@type": "Person"
    }
  ],
  "codeRepository": "https://github.com/KnowledgeCaptureAndDiscovery/somef",
  "dateCreated": "2019-06-06",
  "dateModified": "2025-03-31",
  "description": "SOftware Metadata Extraction Framework: A tool for automatically extracting relevant software information from readme files \n",
  "downloadUrl": "https://github.com/KnowledgeCaptureAndDiscovery/somef/releases",
  "identifier": "https://zenodo.org/badge/latestdoi/190487675",
  "keywords": [
    "codemeta",
    "extraction",
    "metadata",
    "readme",
    "software"
  ],
  "license": "https://spdx.org/licenses/MIT",
  "name": "Software Metadata Extraction Framework (SoMEF)",
  "programmingLanguage": [
    "Jupyter Notebook",
    "Python",
    "Batchfile"
  ],
  "referencePublication": [
    {
      "identifier": "10.1162/qss_a_00167",
      "name": "a framework for creating knowledge graphs of scientific software metadata",
      "url": "https://doi.org/10.1162/qss_a_00167",
      "@type": "ScholarlyArticle"
    }
  ],
  "schema:releaseNotes": "This release includes the following updates:\n- We now recognize `pom.xml`, `setup.py`, `pyproject.toml` and `package.json` files, based on the CodeMeta crosswalks.\n- Regular expressions for licenses.\n- Improving release extraction in Gitlab\n- Fixed documentation inconsistency issues\n- Continuous integration and developmentStatus now are exported.\nMore information: https://github.com/KnowledgeCaptureAndDiscovery/somef/milestone/12?closed=1\n\n## What's Changed\n* Typo fix in statements about application domains by @Daniel-Mietchen in https://github.com/KnowledgeCaptureAndDiscovery/somef/pull/726\n* Resolve issues gitlab release, licenses. Development status. Fixes #721, #713, #722 by @juanjemdIos in https://github.com/KnowledgeCaptureAndDiscovery/somef/pull/727\n* author type Organization by @juanjemdIos in https://github.com/KnowledgeCaptureAndDiscovery/somef/pull/732\n* Update master with changes for 0.9.9 by @dgarijo in https://github.com/KnowledgeCaptureAndDiscovery/somef/pull/735\n* fix #736 by @dgarijo in https://github.com/KnowledgeCaptureAndDiscovery/somef/pull/737\n* Improved file extraction workflows and continuous integration. Enhanced documentation with new properties by @juanjemdIos in https://github.com/KnowledgeCaptureAndDiscovery/somef/pull/738\n* Fix #471, initial version by @Anas-Elhounsri in https://github.com/KnowledgeCaptureAndDiscovery/somef/pull/739\n* Dev by @dgarijo in https://github.com/KnowledgeCaptureAndDiscovery/somef/pull/743\n\n## New Contributors\n* @Daniel-Mietchen made their first contribution in https://github.com/KnowledgeCaptureAndDiscovery/somef/pull/726\n\n**Full Changelog**: https://github.com/KnowledgeCaptureAndDiscovery/somef/compare/0.9.8...0.9.9",
  "softwareRequirements": "https://raw.githubusercontent.com/KnowledgeCaptureAndDiscovery/somef/refs/heads/master/pyproject.toml",
  "version": "0.9.10",
  "developmentStatus": "active",
  "issueTracker": "https://github.com/KnowledgeCaptureAndDiscovery/somef/issues",
  "@type": "SoftwareSourceCode"
}

GitHub Events

Total
  • Create event: 13
  • Release event: 8
  • Issues event: 96
  • Watch event: 17
  • Delete event: 3
  • Issue comment event: 74
  • Push event: 87
  • Pull request review event: 36
  • Pull request review comment event: 42
  • Pull request event: 135
  • Fork event: 5
Last Year
  • Create event: 13
  • Release event: 8
  • Issues event: 96
  • Watch event: 17
  • Delete event: 3
  • Issue comment event: 74
  • Push event: 87
  • Pull request review event: 36
  • Pull request review comment event: 42
  • Pull request event: 135
  • Fork event: 5

Committers

Last synced: almost 3 years ago

All Time
  • Total Commits: 374
  • Total Committers: 21
  • Avg Commits per committer: 17.81
  • Development Distribution Score (DDS): 0.61
Top Committers
Name Email Commits
Daniel Garijo d****v@g****m 146
Miguel Angel Garcia m****o@g****m 60
Allen Mao e****n@g****m 49
Aidan Kelley a****y@g****m 32
vmdiwanji 5****i@u****m 27
Haripriya Dharmala 3****2@u****m 14
Daniel Garijo d****o@i****u 13
Vedant Diwanji v****i@V****1 6
tommy eblen t****n@g****m 4
Akshata Sheth s****a@u****u 4
Rosna Thomas r****a@R****l 3
kuefmz j****8@g****m 3
Rosna Thomas r****3@g****m 2
Aidan Kelley a****y@n****u 2
Joseph l****3@u****u 2
dependabot[bot] 4****]@u****m 2
Vedant Diwanji v****i@V****l 1
jiaywan 4****n@u****m 1
Maarten van Gompel p****n@a****l 1
Jenifer Tabita Ciuciu-Kiss j****r@s****i 1
jiaywan c****y@o****m 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 200
  • Total pull requests: 202
  • Average time to close issues: 10 months
  • Average time to close pull requests: 1 day
  • Total issue authors: 15
  • Total pull request authors: 11
  • Average comments per issue: 1.18
  • Average comments per pull request: 0.28
  • Merged pull requests: 170
  • Bot issues: 0
  • Bot pull requests: 12
Past Year
  • Issues: 61
  • Pull requests: 146
  • Average time to close issues: about 1 month
  • Average time to close pull requests: 1 day
  • Issue authors: 6
  • Pull request authors: 6
  • Average comments per issue: 0.44
  • Average comments per pull request: 0.24
  • Merged pull requests: 118
  • Bot issues: 0
  • Bot pull requests: 9
Top Authors
Issue Authors
  • dgarijo (174)
  • Str3am786 (4)
  • Aidajafarbigloo (4)
  • francoto (2)
  • Ardark27 (2)
  • juanjemdIos (2)
  • vuillaut (2)
  • Anas-Elhounsri (1)
  • carlosug (1)
  • mharis111 (1)
  • AidanKelley (1)
  • tpronk (1)
  • jelenadjuric01 (1)
  • Agnes-U (1)
  • JB0linches (1)
Pull Request Authors
  • dgarijo (110)
  • juanjemdIos (63)
  • Anas-Elhounsri (21)
  • dependabot[bot] (16)
  • kuefmz (8)
  • AidanKelley (5)
  • rafaeel9 (3)
  • StankovskiA (2)
  • Daniel-Mietchen (2)
  • Str3am786 (2)
  • tpronk (1)
Top Labels
Issue Labels
enhancement (84) bug (50) new feature (27) high_priority (14) documentation (11) question (3) dependencies (2) help wanted (1) duplicate (1)
Pull Request Labels
dependencies (16) python (12) java (4)

Dependencies

.github/workflows/pypi-publish.yml actions
  • actions/checkout v2 composite
  • actions/setup-python v2 composite
Dockerfile docker
  • python 3.9 build
docs/requirements.txt pypi
  • mkdocs-material *
setup.py pypi
  • Click ==7.0
  • bs4 ==0.0.1
  • chardet ==5.0.0
  • click-option-group ==0.5.3
  • contractions >=0.1.66
  • imbalanced-learn >=0.8.1
  • inflect >=5.4.0
  • markdown ==3.3.6
  • matplotlib ==3.5.0
  • morph-kgc >=2.3.1
  • nltk ==3.6.6
  • numpy ==1.22.0
  • pandas ==1.3.4
  • pytest *
  • rdflib >=6.0.2
  • rdflib-jsonld ==0.6.2
  • requests >=2.22.0
  • scikit-learn ==1.0
  • scipy >=1.7.1
  • textblob ==0.17.1
  • validators ==0.18.2
  • xgboost ==1.5.0
pyproject.toml pypi
src/somef/test/test_data/repositories/Widoco/Dockerfile docker
  • maven 3.8.3-openjdk-17-slim build
  • openjdk 17-slim build
src/somef/test/test_data/repositories/rdflib-6.0.2/docker-compose.tests.yml docker
src/somef/test/test_data/repositories/wot-hive/docker/auroral-hive/Dockerfile docker
  • eclipse-temurin 17 build
src/somef/test/test_data/repositories/wot-hive/docker/docker-compose.yml docker
  • traefik v2.6
  • traefik/whoami latest
src/somef/test/test_data/repositories/wot-hive/docker/fuseki/Dockerfile docker
  • eclipse-temurin 17 build
src/somef/test/test_data/repositories/RDFChess/pom.xml maven
  • javax:javaee-web-api 7.0 provided
  • chesspresso:chesspresso 1.0
  • commons-cli:commons-cli 1.4
  • commons-io:commons-io 2.7
  • jdom:jdom 1.0
  • org.apache.commons:commons-compress 1.21
  • org.apache.jena:apache-jena 3.8.0
  • org.apache.jena:jena-arq 3.8.0
  • org.apache.jena:jena-fuseki-embedded 3.4.0
  • org.geonames:geonames 1.1.9
  • org.jsoup:jsoup 1.15.3
src/somef/test/test_data/repositories/OWL-To-OAS-Specification-master/requirements.txt pypi
  • mkdocs-material * test
src/somef/test/test_data/repositories/captum/pyproject.toml pypi
src/somef/test/test_data/repositories/captum/setup.py pypi
  • matplotlib *
src/somef/test/test_data/repositories/mir_eval/setup.py pypi
  • future *
  • numpy *
  • scipy *
  • six *
src/somef/test/test_data/repositories/rdflib-6.0.2/requirements.dev.txt pypi
  • berkeleydb * development
  • black ==21.6b0 development
  • coverage * development
  • doctest-ignore-unicode ==0.1.2 development
  • flake8 * development
  • flake8-black * development
  • mypy * development
  • nose ==1.3.7 development
  • nose-timer * development
  • sphinx * development
  • sphinxcontrib-apidoc * development
  • types-setuptools * development
src/somef/test/test_data/repositories/rdflib-6.0.2/requirements.txt pypi
  • html5lib * test
  • isodate * test
  • pyparsing * test
src/somef/test/test_data/repositories/rdflib-6.0.2/setup.py pypi
src/somef/test/test_data/repositories/resolver_deco/setup.py pypi
  • zope.dottedname *
experiments/old_experiments/helper_scripts/environment.yml conda
  • beautifulsoup4
  • jupyter
  • markdown
  • matplotlib
  • nltk
  • numpy
  • pandas
  • requests
  • scikit-learn
src/somef/test/test_data/repositories/captum/environment.yml pypi