{"id":18016315,"url":"https://github.com/stefanpeidli/mousipy","last_synced_at":"2026-03-05T03:33:27.792Z","repository":{"id":57443334,"uuid":"446492338","full_name":"stefanpeidli/mousipy","owner":"stefanpeidli","description":"Translates an AnnData object with mouse gene symbols into one with human gene symbols by mapping orthologs from biomart.","archived":false,"fork":false,"pushed_at":"2025-06-10T11:38:47.000Z","size":15454,"stargazers_count":27,"open_issues_count":4,"forks_count":6,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-20T14:26:33.630Z","etag":null,"topics":["human","mouse","python","scanpy","scrna-seq","species"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stefanpeidli.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-01-10T16:08:43.000Z","updated_at":"2025-09-09T17:00:08.000Z","dependencies_parsed_at":"2023-01-30T00:00:23.835Z","dependency_job_id":"7161a103-0f93-41b8-a756-49594eeb9910","html_url":"https://github.com/stefanpeidli/mousipy","commit_stats":{"total_commits":33,"total_committers":1,"mean_commits":33.0,"dds":0.0,"last_synced_commit":"17581436d6a9c6774fdc4c0e77c86f0a0d48c394"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/stefanpeidli/mousipy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefanpeidli%2Fmousipy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefanpeidli%2Fmousipy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefanpeidli%2Fmousipy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefanpeidli%2Fmousipy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stefanpeidli","download_url":"https://codeload.github.com/stefanpeidli/mousipy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefanpeidli%2Fmousipy/sbom","scorecard":{"id":304413,"data":{"date":"2025-08-11","repo":{"name":"github.com/stefanpeidli/mousipy","commit":"1282ca3cef5eecf73d548afb39caf86c48496cfd"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.7,"checks":[{"name":"Maintained","score":3,"reason":"3 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 2/24 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/python-package.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 8 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-package.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/stefanpeidli/mousipy/python-package.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-package.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/stefanpeidli/mousipy/python-package.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/python-package.yml:29","Warn: pipCommand not pinned by hash: .github/workflows/python-package.yml:30","Warn: pipCommand not pinned by hash: .github/workflows/python-package.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/python-package.yml:40","Warn: pipCommand not pinned by hash: .github/workflows/python-package.yml:41","Warn: pipCommand not pinned by hash: .github/workflows/python-package.yml:42","Warn: pipCommand not pinned by hash: .github/workflows/python-package.yml:43","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-17T21:39:35.202Z","repository_id":57443334,"created_at":"2025-08-17T21:39:35.202Z","updated_at":"2025-08-17T21:39:35.202Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30108653,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T03:32:43.378Z","status":"ssl_error","status_checked_at":"2026-03-05T03:32:22.667Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["human","mouse","python","scanpy","scrna-seq","species"],"created_at":"2024-10-30T04:17:28.936Z","updated_at":"2026-03-05T03:33:27.764Z","avatar_url":"https://github.com/stefanpeidli.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!---![GitHub Workflow Status](https://img.shields.io/github/workflow/status/stefanpeidli/mousipy/Python%20package)---\u003e\n\u003c!---![GitHub issues](https://img.shields.io/github/issues-raw/stefanpeidli/mousipy)---\u003e\n![PyPI - Downloads](https://img.shields.io/pypi/dm/mousipy?label=pip%20downloads)\n![PyPI](https://img.shields.io/pypi/v/mousipy?label=PyPI%20version)\n\n# mousipy\nA python package that translates an AnnData single cell object from scanpy with mouse gene symbols into one with human gene symbols by mapping orthologs from biomart. DOI: [10.5281/zenodo.15631327](https://doi.org/10.5281/zenodo.15631327)\n\n\n# Why?\nMany people just uppercase a mouse gene symbol to get the human ortholog in scRNA-seq data. This works in most cases, but fails for some.\nFor example, there is no Cd8b gene in mice since the correct mouse ortholog to the human gene CD8B is Cd8b1. The gene CD8B is a defining marker for CD8+ T cells\nwhich would get lost by just uppercasing gene symbols but is correctly retained by mapping gene symbols with mousipy. Another example is CD16 (human gene FCGR3A), which has mouse ortholog Fcgr4.\n\n# Install\nJust install via pip:\n\n```pip install mousipy```\n\n# Usage example\n```\nimport scvelo as scv\nfrom mousipy import translate\nadata = scv.datasets.pancreas()  # mouse scRNA-seq dataset\nhumanized_adata = translate(adata)\n```\n\n# How it works\nIn `mousipy/biomart` are lists of mouse (GRCm39) and human (GRCh38.p13) orthologs exported from [biomart](https://www.ensembl.org/biomart/).\nFirst, for all mouse gene symbols in adata.var_names we check if there is an ortholog in these lists. Then, for each mouse gene\n- if there is exactly one human ortholog, the gene symbol is translated directly\n- if there is an entry for that gene in the list explicitly mapping it to no ortholog, it will be discarded\n- if there are multiple different human orthologs, the gene's expression counts are added to **all** its orthologs\n- if the gene is not found in the list, we make it uppercase (and hope that that is the ortholog)\n\n# What is an ortholog?\nTwo genes in different species are called orthologs if they share a common ancestry. At some point in the past these genes must have underwent a specification event.\n\n# Does it make a difference?\n![A delicious double pie plot should be here.](docs/img.png?raw=true \"Double pie\")\n\n# Cite as\n```\nStefan Peidli, ianfd, \u0026 pakiessling. (2025). stefanpeidli/mousipy. Zenodo. https://doi.org/10.5281/zenodo.15631326\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstefanpeidli%2Fmousipy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstefanpeidli%2Fmousipy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstefanpeidli%2Fmousipy/lists"}