{"id":13738645,"url":"https://github.com/odlgroup/odl","last_synced_at":"2025-11-17T16:03:49.886Z","repository":{"id":47528075,"uuid":"45596393","full_name":"odlgroup/odl","owner":"odlgroup","description":"Operator Discretization Library  https://odl.readthedocs.io/","archived":false,"fork":false,"pushed_at":"2025-11-17T14:05:46.000Z","size":49379,"stargazers_count":419,"open_issues_count":272,"forks_count":114,"subscribers_count":25,"default_branch":"master","last_synced_at":"2025-11-17T15:22:36.428Z","etag":null,"topics":["discretization","imaging","inverse-problems","mathematics","optimization","prototyping","python","tomography"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/odlgroup.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2015-11-05T07:57:55.000Z","updated_at":"2025-11-17T14:05:50.000Z","dependencies_parsed_at":"2022-07-21T02:48:38.707Z","dependency_job_id":"6639cf50-6840-4b58-b1a2-dd3ffd62feb1","html_url":"https://github.com/odlgroup/odl","commit_stats":{"total_commits":4186,"total_committers":35,"mean_commits":119.6,"dds":0.5783564261825132,"last_synced_commit":"139e7967e85927f9d1dd39da3942c04035eb81e3"},"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/odlgroup/odl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/odlgroup%2Fodl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/odlgroup%2Fodl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/odlgroup%2Fodl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/odlgroup%2Fodl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/odlgroup","download_url":"https://codeload.github.com/odlgroup/odl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/odlgroup%2Fodl/sbom","scorecard":{"id":702613,"data":{"date":"2025-08-11","repo":{"name":"github.com/odlgroup/odl","commit":"862c6a6d5592f8166e8f2f0b77764a0c2931129a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.9,"checks":[{"name":"Maintained","score":10,"reason":"25 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","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":8,"reason":"Found 7/8 approved changesets -- score normalized to 8","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":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: topLevel 'contents' permission set to 'read': .github/workflows/python-publish.yml:16","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":"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":"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":"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-publish.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/odlgroup/odl/python-publish.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python-publish.yml:68: update your workflow using https://app.stepsecurity.io/secureworkflow/odlgroup/odl/python-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/odlgroup/odl/python-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/odlgroup/odl/python-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/odlgroup/odl/python-publish.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:32","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   1 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"}},{"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Mozilla Public License 2.0: 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":"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/python-publish.yml:41"],"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":"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":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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 29 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"}}]},"last_synced_at":"2025-08-22T05:33:07.660Z","repository_id":47528075,"created_at":"2025-08-22T05:33:07.660Z","updated_at":"2025-08-22T05:33:07.660Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284911789,"owners_count":27083425,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-17T02:00:06.431Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["discretization","imaging","inverse-problems","mathematics","optimization","prototyping","python","tomography"],"created_at":"2024-08-03T03:02:30.685Z","updated_at":"2025-11-17T16:03:49.875Z","avatar_url":"https://github.com/odlgroup.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"[![Anaconda-Server Badge](https://anaconda.org/conda-forge/odl/badges/version.svg)](https://anaconda.org/conda-forge/odl) \u003c!-- [![PyPI version](https://badge.fury.io/py/odl.svg)](https://badge.fury.io/py/odl)\n[![Coverage Status](https://coveralls.io/repos/github/odlgroup/odl/badge.svg)](https://coveralls.io/github/odlgroup/odl) --\u003e\n[![license](https://img.shields.io/badge/license-MPL--2.0-orange.svg)](https://opensource.org/licenses/MPL-2.0)\n[![DOI](https://zenodo.org/badge/45596393.svg)](https://zenodo.org/badge/latestdoi/45596393)\n\nODL\n===\n*Operator Discretization Library* (ODL) is a Python library that enables research in inverse problems on realistic or real data. The framework allows to encapsulate a physical model into an `Operator` that can be used like a mathematical object in, e.g., optimization methods. Furthermore, ODL makes it easy to experiment with reconstruction methods and optimization algorithms for variational regularization, all without sacrificing performance.\n\nFor more details and an introduction into the inner workings of ODL, please refer to the [documentation](https://odl.readthedocs.io/).\n\nHighlights\n==========\n- A versatile and efficient library of optimization routines for smooth and non-smooth problems, such as CGLS, BFGS, PDHG and Douglas-Rachford splitting.\n- Support for tomographic imaging with a unified geometry representation and bindings to external libraries for efficient computation of projections and back-projections.\n- And much more, including support for deep learning libraries, figures of merits, phantom generation, data handling, etc.\n\nInstallation\n============\nInstalling ODL should be as easy as\n\n    pip install odl==1.0.0b1\n\nFor more detailed instructions, check out the [Installation guide](https://odl.readthedocs.io/getting_started/installing.html).\n\nODL is compatible with Python 3 and all major platforms (GNU/Linux / Mac / Windows).\n\nResources\n=========\n- [ODL Documentation](https://odl.readthedocs.io/)\n- [Installation guide](https://odl.readthedocs.io/getting_started/installing.html)\n- [Getting Started](https://odl.readthedocs.io/getting_started/getting_started.html)\n- [Code Examples](examples)\n- [API reference](https://odl.readthedocs.io/odl.html)\n- [ODL Course Material](https://github.com/odlgroup/odlworkshop)\n\nApplications\n============\nThis is an incomplete list of articles and projects using ODL. If you want to add your project to the list, contact the maintainers or file a pull request.\n\n| Article      |  Code  |\n|------------------|--------|\n| *Learning to solve inverse problems using Wasserstein loss*. NIPS OMT Workshop 2017. [arXiv](https://arxiv.org/abs/1710.10898) | [\u003cimg src=\"https://github.com/favicon.ico\" width=\"24\"\u003e](https://github.com/adler-j/wasserstein_inverse_problems) |\n| *Faster PET Reconstruction with a Stochastic Primal-Dual Hybrid Gradient Method*. [Article](https://www.spiedigitallibrary.org/conference-proceedings-of-spie/10394/103941O/Faster-PET-reconstruction-with-a-stochastic-primal-dual-hybrid-gradient/10.1117/12.2272946.full?SSO=1) |  |\n| *Stochastic Primal-Dual Hybrid Gradient Algorithm with Arbitrary Sampling and Imaging Applications*. [arXiv](https://arxiv.org/abs/1706.04957) | [\u003cimg src=\"https://github.com/favicon.ico\" width=\"24\"\u003e](https://github.com/mehrhardt/spdhg) |\n| *Learned Primal-Dual Reconstruction*. [arXiv](https://arxiv.org/abs/1707.06474), [blog](https://adler-j.github.io/2017/07/21/Learning-to-reconstruct.html) | [\u003cimg src=\"https://github.com/favicon.ico\" width=\"24\"\u003e](https://github.com/adler-j/learned_primal_dual) |\n| *Indirect Image Registration with Large Diffeomorphic Deformations*. [arXiv](https://arxiv.org/abs/1706.04048) | [\u003cimg src=\"https://github.com/favicon.ico\" width=\"24\"\u003e](https://github.com/chongchenmath/odl_lddmm) |\n| *High-level algorithm prototyping: an example extending the TVR-DART algorithm*. DGCI, 2017. [DOI](https://doi.org/10.1007/978-3-319-66272-5_10) | [\u003cimg src=\"https://github.com/favicon.ico\" width=\"24\"\u003e](https://github.com/aringh/TVR-DART) |\n| *GPUMCI, a ﬂexible platform for x-ray imaging on the GPU*. Fully3D, 2017 |  |\n| *Spectral CT reconstruction with anti-correlated noise model and joint prior*. Fully3D, 2017 | [\u003cimg src=\"https://github.com/favicon.ico\" width=\"24\"\u003e](https://github.com/adler-j/spectral_ct_examples) |\n| *Solving ill-posed inverse problems using iterative deep neural networks*. Inverse Problems, 2017 [arXiv](https://arxiv.org/abs/1704.04058), [DOI](https://doi.org/10.1088/1361-6420/aa9581) | [\u003cimg src=\"https://github.com/favicon.ico\" width=\"24\"\u003e](https://github.com/adler-j/learned_gradient_tomography) |\n| *Total variation regularization with variable Lebesgue prior*. [arXiv](https://arxiv.org/abs/1702.08807) | [\u003cimg src=\"https://github.com/favicon.ico\" width=\"24\"\u003e](https://github.com/kohr-h/variable_lp_paper) |\n| *Generalized Sinkhorn iterations for regularizing inverse problems using optimal mass transport*. SIAM Journal on Imaging Sciences, 2017. [arXiv](https://arxiv.org/abs/1612.02273), [DOI](https://doi.org/10.1137/17M111208X) | [\u003cimg src=\"https://github.com/favicon.ico\" width=\"24\"\u003e](https://github.com/aringh/Generalized-Sinkhorn-and-tomography) |\n| *A modified fuzzy C means algorithm for shading correction in craniofacial CBCT images*. CMBEBIH, 2017 | [\u003cimg src=\"https://github.com/favicon.ico\" width=\"24\"\u003e](https://github.com/adler-j/mfcm_article) |\n| *The MAX IV imaging concept*. [Article](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5133273/) | |\n| *Shape Based Image Reconstruction Using Linearized Deformations*. Inverse Problems, 2017. [DOI](http://iopscience.iop.org/article/10.1088/1361-6420/aa55af) | [\u003cimg src=\"https://github.com/favicon.ico\" width=\"24\"\u003e](https://github.com/chongchenmath/odl_ld) |\n\n| Project      |  Code  |\n|------------------|--------|\n| Multigrid CT reconstruction | [\u003cimg src=\"https://github.com/favicon.ico\" width=\"24\"\u003e](https://github.com/kohr-h/odl-multigrid) |\n| Inverse problems over Lie groups | [\u003cimg src=\"https://github.com/favicon.ico\" width=\"24\"\u003e](https://github.com/adler-j/lie_grp_diffeo) |\n| Bindings for the [EMRecon](http://www.uni-muenster.de/Sfbmobil/en/veroeffentlichungen/software/emrecon/index.html) package for PET |  [\u003cimg src=\"https://github.com/favicon.ico\" width=\"24\"\u003e](https://github.com/odlgroup/odlemrecon) |\n| ADF-STEM reconstruction using nuclear norm regularization | [\u003cimg src=\"https://github.com/favicon.ico\" width=\"24\"\u003e](https://github.com/adler-j/odl-stem-examples) |\n\n\nLicense\n-------\nMozilla Public License version 2.0 or later. See the [LICENSE](LICENSE) file.\n\nODL developers\n--------------\nDevelopment of ODL started in 2014 as part of the project \"Low complexity image reconstruction in medical imaging” by Ozan Öktem ([@ozanoktem](https://github.com/ozanoktem)), Jonas Adler ([@adler-j](https://github.com/adler-j)) and Holger Kohr ([@kohr-h](https://github.com/kohr-h)). Since 2023, Justus Sagemüller ([@leftaroundabout](https://github.com/leftaroundabout)) and Emilien Valat ([@Emvlt](https://github.com/Emvlt)) have been ODL's main developers. Several others have made significant contributions, see the [contributors](CONTRIBUTORS.md) list.\n\nTo contact the developers either open an issue on the issue tracker or send an email to odl@math.kth.se.\n\nFunding\n-------\nODL has primarily been developed at [KTH Royal Institute of Technology, Stockholm](https://www.kth.se/en/sci/institutioner/math) and [Centrum Wiskunde \u0026 Informatica (CWI), Amsterdam](https://www.cwi.nl).\nIt is financially supported by the Swedish Foundation for Strategic Research as part of the project \"Low complexity image reconstruction in medical imaging\". \n\nSome development time has also been financed by [Elekta](https://www.elekta.com/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fodlgroup%2Fodl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fodlgroup%2Fodl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fodlgroup%2Fodl/lists"}