{"id":357911,"url":"https://github.com/PyPortfolio/PyPortfolioOpt","last_synced_at":"2026-05-30T11:30:19.674Z","repository":{"id":37444250,"uuid":"135300551","full_name":"PyPortfolio/PyPortfolioOpt","owner":"PyPortfolio","description":"Financial portfolio optimisation in python, including classical efficient frontier, Black-Litterman, Hierarchical Risk Parity","archived":false,"fork":false,"pushed_at":"2026-04-20T13:28:51.000Z","size":15182,"stargazers_count":5738,"open_issues_count":91,"forks_count":1120,"subscribers_count":140,"default_branch":"main","last_synced_at":"2026-05-23T08:15:23.734Z","etag":null,"topics":["algorithmic-trading","covariance","efficient-frontier","finance","financial-analysis","investing","investment","investment-analysis","portfolio-management","portfolio-optimization","python","quantitative-finance"],"latest_commit_sha":null,"homepage":"https://pyportfolioopt.readthedocs.io/","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/PyPortfolio.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":"docs/Roadmap.rst","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-05-29T13:30:30.000Z","updated_at":"2026-05-23T01:35:23.000Z","dependencies_parsed_at":"2023-01-30T22:01:10.228Z","dependency_job_id":"da1ddce7-e25b-4c27-90c1-98bd749a73a1","html_url":"https://github.com/PyPortfolio/PyPortfolioOpt","commit_stats":{"total_commits":629,"total_committers":37,"mean_commits":17.0,"dds":0.2575516693163752,"last_synced_commit":"8a1b381371b0793129a5e2ac87191945cc34b58d"},"previous_names":["pyportfolio/pyportfolioopt","robertmartin8/pyportfolioopt"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/PyPortfolio/PyPortfolioOpt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyPortfolio%2FPyPortfolioOpt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyPortfolio%2FPyPortfolioOpt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyPortfolio%2FPyPortfolioOpt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyPortfolio%2FPyPortfolioOpt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PyPortfolio","download_url":"https://codeload.github.com/PyPortfolio/PyPortfolioOpt/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyPortfolio%2FPyPortfolioOpt/sbom","scorecard":{"id":780327,"data":{"date":"2025-08-11","repo":{"name":"github.com/robertmartin8/PyPortfolioOpt","commit":"65cabcee11d91777d63628744c36869ec64a1c85"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.1,"checks":[{"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":"Code-Review","score":6,"reason":"Found 7/11 approved changesets -- score normalized to 6","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":"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":"Maintained","score":0,"reason":"0 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/codecov.yml:1","Warn: no topLevel permission defined: .github/workflows/main.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":"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":"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":"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.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt: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 'master'"],"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":"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/codecov.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/robertmartin8/PyPortfolioOpt/codecov.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codecov.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/robertmartin8/PyPortfolioOpt/codecov.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/codecov.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/robertmartin8/PyPortfolioOpt/codecov.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/robertmartin8/PyPortfolioOpt/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/robertmartin8/PyPortfolioOpt/main.yml/master?enable=pin","Warn: containerImage not pinned by hash: docker/Dockerfile:1: pin your Docker image by updating python:3.11-slim-buster to python:3.11-slim-buster@sha256:c46b0ae5728c2247b99903098ade3176a58e274d9c7d2efeaaab3e0621a53935","Warn: pipCommand not pinned by hash: docker/Dockerfile:6-12","Warn: pipCommand not pinned by hash: docker/Dockerfile:6-12","Warn: pipCommand not pinned by hash: .github/workflows/codecov.yml:27","Warn: pipCommand not pinned by hash: .github/workflows/codecov.yml:28","Warn: pipCommand not pinned by hash: .github/workflows/codecov.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/main.yml:32","Warn: pipCommand not pinned by hash: .github/workflows/main.yml:33","Warn: pipCommand not pinned by hash: .github/workflows/main.yml:34","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 containerImage dependencies pinned","Info:   0 out of   8 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":"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"}},{"name":"Vulnerabilities","score":0,"reason":"22 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-vqfr-h8mv-ghfj","Warn: Project is vulnerable to: GHSA-cpwx-vrp4-4pq7","Warn: Project is vulnerable to: GHSA-gmj6-6f8f-6699","Warn: Project is vulnerable to: GHSA-q2x7-8rv6-6q7h","Warn: Project is vulnerable to: GHSA-33p9-3p43-82vq","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: PYSEC-2025-49 / GHSA-5rjg-fvgr-3xxf","Warn: Project is vulnerable to: GHSA-7cx3-6m66-7c5m","Warn: Project is vulnerable to: GHSA-48p4-8xcf-vxj5","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v","Warn: Project is vulnerable to: PYSEC-2018-34 / GHSA-2fc2-6r4j-p65h","Warn: Project is vulnerable to: PYSEC-2021-856 / GHSA-5545-2q6w-2gh6","Warn: Project is vulnerable to: PYSEC-2019-108 / GHSA-9fq2-x9r6-wfmf","Warn: Project is vulnerable to: PYSEC-2018-33 / GHSA-cw6w-4rcx-xphc","Warn: Project is vulnerable to: PYSEC-2021-857 / GHSA-f7c7-j99h-c22f","Warn: Project is vulnerable to: GHSA-fpfv-jqm9-f5jm","Warn: Project is vulnerable to: PYSEC-2017-1 / GHSA-frgw-fgh6-9g52","Warn: Project is vulnerable to: PYSEC-2020-73","Warn: Project is vulnerable to: PYSEC-2024-110 / GHSA-jw8x-6495-233v","Warn: Project is vulnerable to: GHSA-jxfp-4rvq-9h9m","Warn: Project is vulnerable to: PYSEC-2023-102","Warn: Project is vulnerable to: PYSEC-2023-114"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-23T04:45:08.015Z","repository_id":37444250,"created_at":"2025-08-23T04:45:08.015Z","updated_at":"2025-08-23T04:45:08.015Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33648534,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"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"}},"owner":{"login":"PyPortfolio","name":"PyPortfolio","uuid":"242826734","kind":"organization","description":null,"email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/242826734?v=4","repositories_count":1,"last_synced_at":"2025-11-08T21:13:31.327Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/PyPortfolio","funding_links":[],"total_stars":5270,"followers":0,"following":0,"created_at":"2025-11-08T21:13:31.354Z","updated_at":"2025-11-08T21:13:31.354Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PyPortfolio","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PyPortfolio/repositories"},"packages":[{"id":2879911,"name":"pyportfolioopt","ecosystem":"pypi","description":"Financial portfolio optimization in python","homepage":"https://pyportfolioopt.readthedocs.io/en/latest/","licenses":"MIT License\n        \n        Copyright (c) 2018 Robert Andrew Martin\n        \n        Permission is hereby granted, free of charge, to any person obtaining a copy\n        of this software and associated documentation files (the \"Software\"), to deal\n        in the Software without restriction, including without limitation the rights\n        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n        copies of the Software, and to permit persons to whom the Software is\n        furnished to do so, subject to the following conditions:\n        \n        The above copyright notice and this permission notice shall be included in all\n        copies or substantial portions of the Software.\n        \n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n        SOFTWARE.\n        ","normalized_licenses":["Other"],"repository_url":"https://github.com/pyportfolio/pyportfolioopt","keywords_array":["finance","portfolio","optimization","quant","investing"],"namespace":null,"versions_count":43,"first_release_published_at":"2018-06-10T03:06:27.000Z","latest_release_published_at":"2026-02-26T23:29:39.000Z","latest_release_number":"1.6.0","last_synced_at":"2026-05-29T01:00:45.284Z","created_at":"2022-04-10T12:17:02.159Z","updated_at":"2026-05-29T01:00:45.285Z","registry_url":"https://pypi.org/project/pyportfolioopt/","install_command":"pip install pyportfolioopt --index-url https://pypi.org/simple","documentation_url":"https://pyportfolioopt.readthedocs.io/en/latest/","metadata":{"funding":null,"documentation":"https://pyportfolioopt.readthedocs.io/en/latest/","classifiers":["Development Status :: 4 - Beta","Environment :: Console","Intended Audience :: Financial and Insurance Industry","Intended Audience :: Science/Research","License :: OSI Approved :: MIT License","Natural Language :: English","Operating System :: OS Independent","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.14","Topic :: Office/Business :: Financial","Topic :: Office/Business :: Financial :: Investment"],"normalized_name":"pyportfolioopt","project_status":null},"repo_metadata":{"id":37444250,"uuid":"135300551","full_name":"robertmartin8/PyPortfolioOpt","owner":"robertmartin8","description":"Financial portfolio optimisation in python, including classical efficient frontier, Black-Litterman, Hierarchical Risk Parity","archived":false,"fork":false,"pushed_at":"2024-07-16T10:52:37.000Z","size":9676,"stargazers_count":4508,"open_issues_count":78,"forks_count":956,"subscribers_count":134,"default_branch":"master","last_synced_at":"2024-11-06T09:04:09.709Z","etag":null,"topics":["algorithmic-trading","covariance","efficient-frontier","finance","financial-analysis","investing","investment","investment-analysis","portfolio-management","portfolio-optimization","python","quantitative-finance"],"latest_commit_sha":null,"homepage":"https://pyportfolioopt.readthedocs.io/","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/robertmartin8.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/Roadmap.rst","authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-05-29T13:30:30.000Z","updated_at":"2024-11-03T13:35:12.000Z","dependencies_parsed_at":"2023-01-30T22:01:10.228Z","dependency_job_id":"da1ddce7-e25b-4c27-90c1-98bd749a73a1","html_url":"https://github.com/robertmartin8/PyPortfolioOpt","commit_stats":{"total_commits":629,"total_committers":37,"mean_commits":17.0,"dds":0.2575516693163752,"last_synced_commit":"8a1b381371b0793129a5e2ac87191945cc34b58d"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertmartin8%2FPyPortfolioOpt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertmartin8%2FPyPortfolioOpt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertmartin8%2FPyPortfolioOpt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertmartin8%2FPyPortfolioOpt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robertmartin8","download_url":"https://codeload.github.com/robertmartin8/PyPortfolioOpt/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223722203,"owners_count":17191915,"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","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"},"owner_record":{"login":"robertmartin8","name":"Robert Martin","uuid":"11792905","kind":"user","description":"Astrophysics at the University of Cambridge. Python \u003c3 ","email":"","website":"https://reasonabledeviations.com","location":"Cambridge, UK","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/11792905?u=e8af21876573fd6184ee4c47e89b41610646738a\u0026v=4","repositories_count":8,"last_synced_at":"2023-03-05T02:13:58.473Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/robertmartin8","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-15T04:15:46.299Z","updated_at":"2023-03-05T02:13:58.487Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robertmartin8","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robertmartin8/repositories"},"tags":[{"name":"v1.4.1","sha":"1db089602dee348f1eade9b981ca21cd35f1dcca","kind":"commit","published_at":"2021-05-05T10:21:58.000Z","download_url":"https://codeload.github.com/robertmartin8/PyPortfolioOpt/tar.gz/v1.4.1","html_url":"https://github.com/robertmartin8/PyPortfolioOpt/releases/tag/v1.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertmartin8%2FPyPortfolioOpt/tags/v1.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertmartin8%2FPyPortfolioOpt/tags/v1.4.1/manifests"}]},"repo_metadata_updated_at":"2024-11-11T03:41:06.999Z","dependent_packages_count":7,"downloads":157664,"downloads_period":"last-month","dependent_repos_count":108,"rankings":{"downloads":2.104878963047724,"dependent_repos_count":1.4268232507648277,"dependent_packages_count":2.1558826489433707,"stargazers_count":1.248840925681141,"forks_count":1.449504200088423,"docker_downloads_count":2.2500473694183034,"average":1.7726628929906318},"purl":"pkg:pypi/pyportfolioopt","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/pyportfolioopt","docker_dependents_count":7,"docker_downloads_count":884,"usage_url":"https://repos.ecosyste.ms/usage/pypi/pyportfolioopt","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/pyportfolioopt/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2024-11-11T03:41:04.605Z","issues_count":138,"pull_requests_count":44,"avg_time_to_close_issue":8828663.457831325,"avg_time_to_close_pull_request":4999321.931034483,"issues_closed_count":83,"pull_requests_closed_count":29,"pull_request_authors_count":21,"issue_authors_count":116,"avg_comments_per_issue":2.710144927536232,"avg_comments_per_pull_request":0.8409090909090909,"merged_pull_requests_count":16,"bot_issues_count":0,"bot_pull_requests_count":14,"past_year_issues_count":32,"past_year_pull_requests_count":11,"past_year_avg_time_to_close_issue":2879346.0,"past_year_avg_time_to_close_pull_request":2124146.8,"past_year_issues_closed_count":5,"past_year_pull_requests_closed_count":5,"past_year_pull_request_authors_count":7,"past_year_issue_authors_count":32,"past_year_avg_comments_per_issue":1.0,"past_year_avg_comments_per_pull_request":0.45454545454545453,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":3,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertmartin8%2FPyPortfolioOpt/issues","maintainers":[{"login":"88d52bdba0366127fffca9dfa93895","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/88d52bdba0366127fffca9dfa93895"},{"login":"robertmartin8","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/robertmartin8"}],"active_maintainers":[{"login":"88d52bdba0366127fffca9dfa93895","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/88d52bdba0366127fffca9dfa93895"},{"login":"robertmartin8","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/robertmartin8"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pyportfolioopt/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pyportfolioopt/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pyportfolioopt/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pyportfolioopt/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pyportfolioopt/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pyportfolioopt/codemeta","maintainers":[{"uuid":"robertmartin8","login":"robertmartin8","name":null,"email":null,"url":null,"packages_count":1,"html_url":"https://pypi.org/user/robertmartin8/","role":null,"created_at":"2023-01-23T13:32:35.752Z","updated_at":"2023-01-23T13:32:35.752Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/robertmartin8/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":873902,"maintainers_count":373727,"namespaces_count":0,"keywords_count":285845,"github":"pypi","metadata":{"funded_packages_count":54057},"icon_url":"https://github.com/pypi.png","created_at":"2022-04-04T15:19:23.364Z","updated_at":"2026-05-29T05:11:24.287Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/namespaces"}}],"commits":{"id":11577562,"full_name":"PyPortfolio/PyPortfolioOpt","default_branch":"master","total_commits":728,"total_committers":51,"total_bot_commits":13,"total_bot_committers":1,"mean_commits":14.27450980392157,"dds":0.31456043956043955,"past_year_total_commits":40,"past_year_total_committers":10,"past_year_total_bot_commits":4,"past_year_total_bot_committers":1,"past_year_mean_commits":4.0,"past_year_dds":0.475,"last_synced_at":"2026-05-27T10:07:52.166Z","last_synced_commit":"c524c6e5f07150f2075cbf5b255e8a4827d8caf9","created_at":"2025-11-24T16:06:20.113Z","updated_at":"2026-05-27T10:04:13.721Z","committers":[{"name":"robertmartin8","email":"martin.robertandrew@gmail.com","login":"robertmartin8","count":499},{"name":"phschiele","email":"phschiele@gmail.com","login":"phschiele","count":34},{"name":"SeaPea1","email":"75633566+SeaPea1","login":"SeaPea1","count":30},{"name":"88d52bdba0366127fffca9dfa93895","email":"tuan.tran@datanest.vn","login":null,"count":26},{"name":"Franz Király","email":"fkiraly@gcos.ai","login":"fkiraly","count":21},{"name":"88d52bdba0366127fffca9dfa93895","email":"88d52bdba0366127fffca9dfa93895","login":"88d52bdba0366127fffca9dfa93895","count":14},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":13},{"name":"Thomas Schmelzer","email":"thomas.schmlezer@gmail.com","login":null,"count":13},{"name":"Thomas Schmelzer","email":"thomas.schmelzer@gmail.com","login":"tschm","count":10},{"name":"Yosuke OTSUKI","email":"y.otsuki30@gmail.com","login":"yosukesan","count":6},{"name":"nknudde","email":"nicolas.knudde@gmail.com","login":"gpfins","count":6},{"name":"Avery Levin","email":"alevin@ycharts.com","login":null,"count":4},{"name":"Pat Newell","email":"pnewell+git@renttherunway.com","login":"pmn4","count":4},{"name":"bhutraaditya","email":"adibhu@gmail.com","login":"bhutraaditya","count":4},{"name":"Dingyuan Wang","email":"gumblex@aosc.io","login":"gumblex","count":3},{"name":"Felipe S. S. Schneider","email":"37125+schneiderfelipe","login":"schneiderfelipe","count":3},{"name":"Gábor Lipták","email":"gliptak@gmail.com","login":"gliptak","count":2},{"name":"Ayoub Ennassiri","email":"ayo.enn@gmail.com","login":"samatix","count":2},{"name":"Filipe Brandão","email":"fdabrandao@gmail.com","login":"fdabrandao","count":2},{"name":"Anchit Shrivastava","email":"anchit.s@tatrasdata.com","login":"anchitshrivastava","count":1},{"name":"Albert Richard Caputo III","email":"rcaputo3@outlook.com","login":"arcaputo3","count":1},{"name":"Ahmedd-Ibrahim","email":"0ahmedibrahem@gmail.com","login":"Ahmedd-Ibrahim","count":1},{"name":"Everest Law","email":"elaw@shellstreetlabs.com","login":null,"count":1},{"name":"INTRANET\\colombi","email":"giordano.colombi@mirante.ch","login":null,"count":1},{"name":"aral190","email":"shutch190@gmail.com","login":null,"count":1},{"name":"r","email":"ryanrussell","login":"ryanrussell","count":1},{"name":"mkeds","email":"64201943+mkeds","login":"mkeds","count":1},{"name":"bboy(e-n)","email":"41503496+bvonboyen","login":"bvonboyen","count":1},{"name":"baobach","email":"95854748+baobach","login":"baobach","count":1},{"name":"andyherfer","email":"andyherfer@yahoo.com.mx","login":"andyherfer","count":1},{"name":"Wilmer van der Gaast","email":"github@wilmer.gaast.net","login":"Wilm0r","count":1},{"name":"Webb Sledge","email":"webbsledge@gmail.com","login":"webbsledge","count":1},{"name":"Victor Duran","email":"85962342+duranvrNubank","login":"duranvrNubank","count":1},{"name":"Victor","email":"victor.tingstrom@gmail.com","login":"tingiskhan","count":1},{"name":"Tuan","email":"tuan@tenpoint7.com","login":"tuantp7","count":1},{"name":"Tomas","email":"36682793+TommyBark","login":"TommyBark","count":1},{"name":"Thenordine","email":"1475692+thenordine","login":"thenordine","count":1},{"name":"Steven Diamond","email":"diamond.po.central@gmail.com","login":"SteveDiamond","count":1},{"name":"Shlomi Kushchi","email":"shlomikushchi","login":"shlomikushchi","count":1},{"name":"Philipp D. Dubach","email":"113773927+philippdubach","login":"philippdubach","count":1},{"name":"Mirco","email":"43813307+mircuz","login":"mircuz","count":1},{"name":"Michele Fortunato","email":"mikyluck92@hotmail.it","login":"mikylucky","count":1},{"name":"Marcin Szymański","email":"ms32035@gmail.com","login":"ms32035","count":1},{"name":"Manish Tiwari","email":"manish.tiwari.09@zohomail.in","login":"PredictiveManish","count":1},{"name":"LBrummer","email":"ludwig.brummer@gmail.com","login":"LBrummer","count":1},{"name":"Fabio Rueda","email":"avances123@gmail.com","login":"avances123","count":1},{"name":"Eric Armbruster","email":"eric.armbruster@tum.de","login":"armbruer","count":1},{"name":"Dimitris Papakyriakopoulos","email":"t8190137@aueb.gr","login":"dpapakyriak","count":1},{"name":"Copilot","email":"198982749+Copilot","login":"Copilot","count":1},{"name":"Astarag Mohapatra","email":"40949756+Athe-kunal","login":"Athe-kunal","count":1},{"name":"nicopons96","email":"nico.pons96@gmail.com","login":null,"count":1}],"past_year_committers":[{"name":"Franz Király","email":"fkiraly@gcos.ai","login":"fkiraly","count":21},{"name":"Thomas Schmelzer","email":"thomas.schmelzer@gmail.com","login":"tschm","count":8},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":4},{"name":"Victor","email":"victor.tingstrom@gmail.com","login":"tingiskhan","count":1},{"name":"Philipp D. Dubach","email":"113773927+philippdubach","login":"philippdubach","count":1},{"name":"Marcin Szymański","email":"ms32035@gmail.com","login":"ms32035","count":1},{"name":"Manish Tiwari","email":"manish.tiwari.09@zohomail.in","login":"PredictiveManish","count":1},{"name":"Fabio Rueda","email":"avances123@gmail.com","login":"avances123","count":1},{"name":"Copilot","email":"198982749+Copilot","login":"Copilot","count":1},{"name":"aral190","email":"shutch190@gmail.com","login":null,"count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyPortfolio%2FPyPortfolioOpt/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-29T00:00:10.182Z","repositories_count":6246133,"commits_count":882930625,"contributors_count":34962319,"owners_count":1159662,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues":{"table":{"full_name":"PyPortfolio/PyPortfolioOpt","html_url":"https://github.com/PyPortfolio/PyPortfolioOpt","last_synced_at":"2026-05-27T10:01:44.392Z","status":"active","issues_count":3,"pull_requests_count":11,"avg_time_to_close_issue":null,"avg_time_to_close_pull_request":2896921.0,"issues_closed_count":0,"pull_requests_closed_count":1,"pull_request_authors_count":9,"issue_authors_count":3,"avg_comments_per_issue":2.6666666666666665,"avg_comments_per_pull_request":5.818181818181818,"merged_pull_requests_count":0,"bot_issues_count":0,"bot_pull_requests_count":1,"past_year_issues_count":3,"past_year_pull_requests_count":11,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":2896921.0,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":1,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":3,"past_year_avg_comments_per_issue":2.6666666666666665,"past_year_avg_comments_per_pull_request":5.818181818181818,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":1,"past_year_merged_pull_requests_count":0,"created_at":"2025-11-08T22:00:09.310Z","updated_at":"2026-05-27T10:01:44.392Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyPortfolio%2FPyPortfolioOpt","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyPortfolio%2FPyPortfolioOpt/issues","issue_labels_count":{"table":{"enhancement":1,"bug":1,"good first issue":1}},"pull_request_labels_count":{"table":{"maintenance":3,"enhancement":1,"documentation":1}},"issue_author_associations_count":{"table":{"CONTRIBUTOR":2,"COLLABORATOR":1}},"pull_request_author_associations_count":{"table":{"NONE":6,"CONTRIBUTOR":4,"COLLABORATOR":1}},"issue_authors":{"table":{"PredictiveManish":1,"tschm":1,"fkiraly":1}},"pull_request_authors":{"table":{"tschm":3,"whenpoem":1,"dthinkr":1,"fkiraly":1,"Bortlesboat":1,"dependabot[bot]":1,"wavebyrd":1,"ayushraj09":1,"Shuvam586":1}},"host":{"table":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-29T00:00:19.590Z","repositories_count":14723878,"issues_count":33905038,"pull_requests_count":111169921,"authors_count":11279510,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"}},"past_year_issue_labels_count":{"table":{"bug":1,"enhancement":1,"good first issue":1}},"past_year_pull_request_labels_count":{"table":{"maintenance":3,"documentation":1,"enhancement":1}},"past_year_issue_author_associations_count":{"table":{"CONTRIBUTOR":2,"COLLABORATOR":1}},"past_year_pull_request_author_associations_count":{"table":{"NONE":6,"CONTRIBUTOR":4,"COLLABORATOR":1}},"past_year_issue_authors":{"table":{"fkiraly":1,"PredictiveManish":1,"tschm":1}},"past_year_pull_request_authors":{"table":{"tschm":3,"ayushraj09":1,"Bortlesboat":1,"dependabot[bot]":1,"dthinkr":1,"fkiraly":1,"Shuvam586":1,"wavebyrd":1,"whenpoem":1}},"maintainers":[{"table":{"login":"fkiraly","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/fkiraly"}}],"active_maintainers":[{"table":{"login":"fkiraly","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/fkiraly"}}]}},"events":{"total":{"DeleteEvent":4,"MemberEvent":3,"PullRequestEvent":43,"ForkEvent":24,"IssuesEvent":27,"WatchEvent":103,"IssueCommentEvent":76,"PushEvent":48,"PullRequestReviewCommentEvent":7,"PullRequestReviewEvent":20,"CreateEvent":14},"last_year":{"DeleteEvent":4,"MemberEvent":3,"PullRequestEvent":43,"ForkEvent":24,"IssuesEvent":27,"WatchEvent":103,"IssueCommentEvent":76,"PushEvent":48,"PullRequestReviewCommentEvent":7,"PullRequestReviewEvent":20,"CreateEvent":14}},"keywords":["algorithmic-trading","covariance","efficient-frontier","finance","financial-analysis","investing","investment","investment-analysis","portfolio-management","portfolio-optimization","python","quantitative-finance"],"dependencies":[{"ecosystem":"pypi","filepath":"poetry.lock","sha":null,"kind":"lockfile","created_at":"2022-08-08T20:16:01.035Z","updated_at":"2022-08-08T20:16:01.035Z","repository_link":"https://github.com/PyPortfolio/PyPortfolioOpt/blob/main/poetry.lock","dependencies":[{"id":693277961,"package_name":"anyio","ecosystem":"pypi","requirements":"3.6.1","direct":false,"kind":"develop","optional":false},{"id":693277962,"package_name":"appnope","ecosystem":"pypi","requirements":"0.1.3","direct":false,"kind":"develop","optional":false},{"id":693277963,"package_name":"argon2-cffi","ecosystem":"pypi","requirements":"21.3.0","direct":false,"kind":"develop","optional":false},{"id":693277964,"package_name":"argon2-cffi-bindings","ecosystem":"pypi","requirements":"21.2.0","direct":false,"kind":"develop","optional":false},{"id":693277965,"package_name":"asttokens","ecosystem":"pypi","requirements":"2.0.5","direct":false,"kind":"develop","optional":false},{"id":693277966,"package_name":"atomicwrites","ecosystem":"pypi","requirements":"1.4.0","direct":false,"kind":"develop","optional":false},{"id":693277967,"package_name":"attrs","ecosystem":"pypi","requirements":"21.4.0","direct":false,"kind":"develop","optional":false},{"id":693277968,"package_name":"babel","ecosystem":"pypi","requirements":"2.10.1","direct":false,"kind":"develop","optional":false},{"id":693277969,"package_name":"backcall","ecosystem":"pypi","requirements":"0.2.0","direct":false,"kind":"develop","optional":false},{"id":693277970,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"4.11.1","direct":false,"kind":"develop","optional":false},{"id":693277971,"package_name":"black","ecosystem":"pypi","requirements":"22.3.0","direct":false,"kind":"develop","optional":false},{"id":693277972,"package_name":"bleach","ecosystem":"pypi","requirements":"5.0.0","direct":false,"kind":"develop","optional":false},{"id":693277973,"package_name":"certifi","ecosystem":"pypi","requirements":"2022.5.18.1","direct":false,"kind":"develop","optional":false},{"id":693277974,"package_name":"cffi","ecosystem":"pypi","requirements":"1.15.0","direct":false,"kind":"develop","optional":false},{"id":693277975,"package_name":"charset-normalizer","ecosystem":"pypi","requirements":"2.0.12","direct":false,"kind":"develop","optional":false},{"id":693277976,"package_name":"click","ecosystem":"pypi","requirements":"8.1.3","direct":false,"kind":"develop","optional":false},{"id":693277977,"package_name":"colorama","ecosystem":"pypi","requirements":"0.4.4","direct":false,"kind":"develop","optional":false},{"id":693277978,"package_name":"coverage","ecosystem":"pypi","requirements":"6.3.3","direct":false,"kind":"develop","optional":false},{"id":693277979,"package_name":"cvxpy","ecosystem":"pypi","requirements":"1.2.1","direct":false,"kind":"runtime","optional":false},{"id":693277980,"package_name":"cycler","ecosystem":"pypi","requirements":"0.11.0","direct":false,"kind":"runtime","optional":false},{"id":693277981,"package_name":"debugpy","ecosystem":"pypi","requirements":"1.6.0","direct":false,"kind":"develop","optional":false},{"id":693277982,"package_name":"decorator","ecosystem":"pypi","requirements":"5.1.1","direct":false,"kind":"develop","optional":false},{"id":693277983,"package_name":"defusedxml","ecosystem":"pypi","requirements":"0.7.1","direct":false,"kind":"develop","optional":false},{"id":693277984,"package_name":"ecos","ecosystem":"pypi","requirements":"2.0.10","direct":false,"kind":"runtime","optional":false},{"id":693277985,"package_name":"entrypoints","ecosystem":"pypi","requirements":"0.4","direct":false,"kind":"develop","optional":false},{"id":693277986,"package_name":"executing","ecosystem":"pypi","requirements":"0.8.3","direct":false,"kind":"develop","optional":false},{"id":693277987,"package_name":"fastjsonschema","ecosystem":"pypi","requirements":"2.15.3","direct":false,"kind":"develop","optional":false},{"id":693277988,"package_name":"flake8","ecosystem":"pypi","requirements":"4.0.1","direct":false,"kind":"develop","optional":false},{"id":693277989,"package_name":"fonttools","ecosystem":"pypi","requirements":"4.33.3","direct":false,"kind":"runtime","optional":false},{"id":693277990,"package_name":"idna","ecosystem":"pypi","requirements":"3.3","direct":false,"kind":"develop","optional":false},{"id":693277991,"package_name":"importlib-metadata","ecosystem":"pypi","requirements":"4.11.4","direct":false,"kind":"develop","optional":false},{"id":693277992,"package_name":"importlib-resources","ecosystem":"pypi","requirements":"5.7.1","direct":false,"kind":"develop","optional":false},{"id":693277993,"package_name":"iniconfig","ecosystem":"pypi","requirements":"1.1.1","direct":false,"kind":"develop","optional":false},{"id":693277994,"package_name":"ipykernel","ecosystem":"pypi","requirements":"6.13.0","direct":false,"kind":"develop","optional":false},{"id":693277995,"package_name":"ipython","ecosystem":"pypi","requirements":"8.3.0","direct":false,"kind":"develop","optional":false},{"id":693277996,"package_name":"ipython-genutils","ecosystem":"pypi","requirements":"0.2.0","direct":false,"kind":"develop","optional":false},{"id":693277997,"package_name":"jedi","ecosystem":"pypi","requirements":"0.18.1","direct":false,"kind":"develop","optional":false},{"id":693277998,"package_name":"jinja2","ecosystem":"pypi","requirements":"3.1.2","direct":false,"kind":"develop","optional":false},{"id":693277999,"package_name":"joblib","ecosystem":"pypi","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":693278000,"package_name":"json5","ecosystem":"pypi","requirements":"0.9.8","direct":false,"kind":"develop","optional":false},{"id":693278001,"package_name":"jsonschema","ecosystem":"pypi","requirements":"4.5.1","direct":false,"kind":"develop","optional":false},{"id":693278002,"package_name":"jupyter-client","ecosystem":"pypi","requirements":"7.3.1","direct":false,"kind":"develop","optional":false},{"id":693278003,"package_name":"jupyter-core","ecosystem":"pypi","requirements":"4.10.0","direct":false,"kind":"develop","optional":false},{"id":693278004,"package_name":"jupyter-server","ecosystem":"pypi","requirements":"1.17.0","direct":false,"kind":"develop","optional":false},{"id":693278005,"package_name":"jupyterlab","ecosystem":"pypi","requirements":"3.4.2","direct":false,"kind":"develop","optional":false},{"id":693278006,"package_name":"jupyterlab-pygments","ecosystem":"pypi","requirements":"0.2.2","direct":false,"kind":"develop","optional":false},{"id":693278007,"package_name":"jupyterlab-server","ecosystem":"pypi","requirements":"2.14.0","direct":false,"kind":"develop","optional":false},{"id":693278008,"package_name":"kiwisolver","ecosystem":"pypi","requirements":"1.4.2","direct":false,"kind":"runtime","optional":false},{"id":693278009,"package_name":"lxml","ecosystem":"pypi","requirements":"4.8.0","direct":false,"kind":"develop","optional":false},{"id":693278010,"package_name":"markupsafe","ecosystem":"pypi","requirements":"2.1.1","direct":false,"kind":"develop","optional":false},{"id":693278011,"package_name":"matplotlib","ecosystem":"pypi","requirements":"3.5.2","direct":false,"kind":"runtime","optional":false},{"id":693278012,"package_name":"matplotlib-inline","ecosystem":"pypi","requirements":"0.1.3","direct":false,"kind":"develop","optional":false},{"id":693278013,"package_name":"mccabe","ecosystem":"pypi","requirements":"0.6.1","direct":false,"kind":"develop","optional":false},{"id":693278014,"package_name":"mistune","ecosystem":"pypi","requirements":"0.8.4","direct":false,"kind":"develop","optional":false},{"id":693278015,"package_name":"multitasking","ecosystem":"pypi","requirements":"0.0.10","direct":false,"kind":"develop","optional":false},{"id":693278016,"package_name":"mypy-extensions","ecosystem":"pypi","requirements":"0.4.3","direct":false,"kind":"develop","optional":false},{"id":693278017,"package_name":"nbclassic","ecosystem":"pypi","requirements":"0.3.7","direct":false,"kind":"develop","optional":false},{"id":693278018,"package_name":"nbclient","ecosystem":"pypi","requirements":"0.6.3","direct":false,"kind":"develop","optional":false},{"id":693278019,"package_name":"nbconvert","ecosystem":"pypi","requirements":"6.5.0","direct":false,"kind":"develop","optional":false},{"id":693278020,"package_name":"nbformat","ecosystem":"pypi","requirements":"5.4.0","direct":false,"kind":"develop","optional":false},{"id":693278021,"package_name":"nest-asyncio","ecosystem":"pypi","requirements":"1.5.5","direct":false,"kind":"develop","optional":false},{"id":693278022,"package_name":"notebook","ecosystem":"pypi","requirements":"6.4.11","direct":false,"kind":"develop","optional":false},{"id":693278023,"package_name":"notebook-shim","ecosystem":"pypi","requirements":"0.1.0","direct":false,"kind":"develop","optional":false},{"id":693278024,"package_name":"numpy","ecosystem":"pypi","requirements":"1.22.4","direct":false,"kind":"runtime","optional":false},{"id":693278025,"package_name":"osqp","ecosystem":"pypi","requirements":"0.6.2.post5","direct":false,"kind":"runtime","optional":false},{"id":693278026,"package_name":"packaging","ecosystem":"pypi","requirements":"21.3","direct":false,"kind":"runtime","optional":false},{"id":693278027,"package_name":"pandas","ecosystem":"pypi","requirements":"1.4.2","direct":false,"kind":"runtime","optional":false},{"id":693278028,"package_name":"pandocfilters","ecosystem":"pypi","requirements":"1.5.0","direct":false,"kind":"develop","optional":false},{"id":693278029,"package_name":"parso","ecosystem":"pypi","requirements":"0.8.3","direct":false,"kind":"develop","optional":false},{"id":693278030,"package_name":"pathspec","ecosystem":"pypi","requirements":"0.9.0","direct":false,"kind":"develop","optional":false},{"id":693278031,"package_name":"pexpect","ecosystem":"pypi","requirements":"4.8.0","direct":false,"kind":"develop","optional":false},{"id":693278032,"package_name":"pickleshare","ecosystem":"pypi","requirements":"0.7.5","direct":false,"kind":"develop","optional":false},{"id":693278033,"package_name":"pillow","ecosystem":"pypi","requirements":"9.1.1","direct":false,"kind":"runtime","optional":false},{"id":693278034,"package_name":"platformdirs","ecosystem":"pypi","requirements":"2.5.2","direct":false,"kind":"develop","optional":false},{"id":693278035,"package_name":"pluggy","ecosystem":"pypi","requirements":"1.0.0","direct":false,"kind":"develop","optional":false},{"id":693278036,"package_name":"prometheus-client","ecosystem":"pypi","requirements":"0.14.1","direct":false,"kind":"develop","optional":false},{"id":693278037,"package_name":"prompt-toolkit","ecosystem":"pypi","requirements":"3.0.29","direct":false,"kind":"develop","optional":false},{"id":693278038,"package_name":"psutil","ecosystem":"pypi","requirements":"5.9.1","direct":false,"kind":"develop","optional":false},{"id":693278039,"package_name":"ptyprocess","ecosystem":"pypi","requirements":"0.7.0","direct":false,"kind":"develop","optional":false},{"id":693278040,"package_name":"pure-eval","ecosystem":"pypi","requirements":"0.2.2","direct":false,"kind":"develop","optional":false},{"id":693278041,"package_name":"py","ecosystem":"pypi","requirements":"1.11.0","direct":false,"kind":"develop","optional":false},{"id":693278042,"package_name":"pycodestyle","ecosystem":"pypi","requirements":"2.8.0","direct":false,"kind":"develop","optional":false},{"id":693278043,"package_name":"pycparser","ecosystem":"pypi","requirements":"2.21","direct":false,"kind":"develop","optional":false},{"id":693278044,"package_name":"pyflakes","ecosystem":"pypi","requirements":"2.4.0","direct":false,"kind":"develop","optional":false},{"id":693278045,"package_name":"pygments","ecosystem":"pypi","requirements":"2.12.0","direct":false,"kind":"develop","optional":false},{"id":693278046,"package_name":"pyparsing","ecosystem":"pypi","requirements":"3.0.9","direct":false,"kind":"runtime","optional":false},{"id":693278047,"package_name":"pyrsistent","ecosystem":"pypi","requirements":"0.18.1","direct":false,"kind":"develop","optional":false},{"id":693278048,"package_name":"pytest","ecosystem":"pypi","requirements":"7.1.2","direct":false,"kind":"develop","optional":false},{"id":693278049,"package_name":"pytest-cov","ecosystem":"pypi","requirements":"3.0.0","direct":false,"kind":"develop","optional":false},{"id":693278050,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"2.8.2","direct":false,"kind":"runtime","optional":false},{"id":693278051,"package_name":"pytz","ecosystem":"pypi","requirements":"2022.1","direct":false,"kind":"runtime","optional":false},{"id":693278052,"package_name":"pywin32","ecosystem":"pypi","requirements":"304","direct":false,"kind":"develop","optional":false},{"id":693278053,"package_name":"pywinpty","ecosystem":"pypi","requirements":"2.0.5","direct":false,"kind":"develop","optional":false},{"id":693278054,"package_name":"pyzmq","ecosystem":"pypi","requirements":"23.0.0","direct":false,"kind":"develop","optional":false},{"id":693278055,"package_name":"qdldl","ecosystem":"pypi","requirements":"0.1.5.post2","direct":false,"kind":"runtime","optional":false},{"id":693278056,"package_name":"requests","ecosystem":"pypi","requirements":"2.27.1","direct":false,"kind":"develop","optional":false},{"id":693278057,"package_name":"scikit-learn","ecosystem":"pypi","requirements":"1.1.1","direct":false,"kind":"runtime","optional":false},{"id":693278058,"package_name":"scipy","ecosystem":"pypi","requirements":"1.8.1","direct":false,"kind":"runtime","optional":false},{"id":693278059,"package_name":"scs","ecosystem":"pypi","requirements":"3.2.0","direct":false,"kind":"runtime","optional":false},{"id":693278060,"package_name":"send2trash","ecosystem":"pypi","requirements":"1.8.0","direct":false,"kind":"develop","optional":false},{"id":693278061,"package_name":"setuptools-scm","ecosystem":"pypi","requirements":"6.4.2","direct":false,"kind":"runtime","optional":false},{"id":693278062,"package_name":"six","ecosystem":"pypi","requirements":"1.16.0","direct":false,"kind":"runtime","optional":false},{"id":693278063,"package_name":"sniffio","ecosystem":"pypi","requirements":"1.2.0","direct":false,"kind":"develop","optional":false},{"id":693278064,"package_name":"soupsieve","ecosystem":"pypi","requirements":"2.3.2.post1","direct":false,"kind":"develop","optional":false},{"id":693278065,"package_name":"stack-data","ecosystem":"pypi","requirements":"0.2.0","direct":false,"kind":"develop","optional":false},{"id":693278066,"package_name":"terminado","ecosystem":"pypi","requirements":"0.15.0","direct":false,"kind":"develop","optional":false},{"id":693278067,"package_name":"threadpoolctl","ecosystem":"pypi","requirements":"3.1.0","direct":false,"kind":"runtime","optional":false},{"id":693278068,"package_name":"tinycss2","ecosystem":"pypi","requirements":"1.1.1","direct":false,"kind":"develop","optional":false},{"id":693278069,"package_name":"tomli","ecosystem":"pypi","requirements":"2.0.1","direct":false,"kind":"runtime","optional":false},{"id":693278070,"package_name":"tornado","ecosystem":"pypi","requirements":"6.1","direct":false,"kind":"develop","optional":false},{"id":693278071,"package_name":"traitlets","ecosystem":"pypi","requirements":"5.2.1.post0","direct":false,"kind":"develop","optional":false},{"id":693278072,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"4.2.0","direct":false,"kind":"develop","optional":false},{"id":693278073,"package_name":"urllib3","ecosystem":"pypi","requirements":"1.26.9","direct":false,"kind":"develop","optional":false},{"id":693278074,"package_name":"wcwidth","ecosystem":"pypi","requirements":"0.2.5","direct":false,"kind":"develop","optional":false},{"id":693278075,"package_name":"webencodings","ecosystem":"pypi","requirements":"0.5.1","direct":false,"kind":"develop","optional":false},{"id":693278076,"package_name":"websocket-client","ecosystem":"pypi","requirements":"1.3.2","direct":false,"kind":"develop","optional":false},{"id":693278077,"package_name":"yfinance","ecosystem":"pypi","requirements":"0.1.70","direct":false,"kind":"develop","optional":false},{"id":693278078,"package_name":"zipp","ecosystem":"pypi","requirements":"3.8.0","direct":false,"kind":"develop","optional":false}]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2022-08-08T20:16:01.191Z","updated_at":"2022-08-08T20:16:01.191Z","repository_link":"https://github.com/PyPortfolio/PyPortfolioOpt/blob/main/pyproject.toml","dependencies":[{"id":693278914,"package_name":"python","ecosystem":"pypi","requirements":"\u003e=3.8,\u003c3.11","direct":true,"kind":"runtime","optional":false},{"id":693278915,"package_name":"scipy","ecosystem":"pypi","requirements":"^1.3","direct":true,"kind":"runtime","optional":false},{"id":693278916,"package_name":"pandas","ecosystem":"pypi","requirements":"\u003e=0.19","direct":true,"kind":"runtime","optional":false},{"id":693278917,"package_name":"cvxpy","ecosystem":"pypi","requirements":"^1.1.10","direct":true,"kind":"runtime","optional":false},{"id":693278918,"package_name":"numpy","ecosystem":"pypi","requirements":"^1.22.4","direct":true,"kind":"runtime","optional":false},{"id":693278919,"package_name":"matplotlib","ecosystem":"pypi","requirements":"^3.5.2","direct":true,"kind":"runtime","optional":false},{"id":693278920,"package_name":"scikit-learn","ecosystem":"pypi","requirements":"^1.1.1","direct":true,"kind":"runtime","optional":false},{"id":693278921,"package_name":"pytest","ecosystem":"pypi","requirements":"^7.1.2","direct":true,"kind":"develop","optional":false},{"id":693278922,"package_name":"flake8","ecosystem":"pypi","requirements":"^4.0.1","direct":true,"kind":"develop","optional":false},{"id":693278923,"package_name":"jupyterlab","ecosystem":"pypi","requirements":"^3.4.2","direct":true,"kind":"develop","optional":false},{"id":693278924,"package_name":"black","ecosystem":"pypi","requirements":"^22.3.0","direct":true,"kind":"develop","optional":false},{"id":693278925,"package_name":"ipykernel","ecosystem":"pypi","requirements":"^6.13.0","direct":true,"kind":"develop","optional":false},{"id":693278926,"package_name":"jedi","ecosystem":"pypi","requirements":"^0.18.1","direct":true,"kind":"develop","optional":false},{"id":693278927,"package_name":"pytest-cov","ecosystem":"pypi","requirements":"^3.0.0","direct":true,"kind":"develop","optional":false},{"id":693278928,"package_name":"yfinance","ecosystem":"pypi","requirements":"^0.1.70","direct":true,"kind":"develop","optional":false}]},{"ecosystem":"pypi","filepath":"requirements.txt","sha":null,"kind":"manifest","created_at":"2022-08-08T20:16:01.312Z","updated_at":"2022-08-08T20:16:01.312Z","repository_link":"https://github.com/PyPortfolio/PyPortfolioOpt/blob/main/requirements.txt","dependencies":[{"id":693279697,"package_name":"cvxpy","ecosystem":"pypi","requirements":"\u003e=1.1.10","direct":true,"kind":"runtime","optional":false},{"id":693279703,"package_name":"matplotlib","ecosystem":"pypi","requirements":"\u003e=3.2.0","direct":true,"kind":"runtime","optional":false},{"id":693279704,"package_name":"numpy","ecosystem":"pypi","requirements":"\u003e=1.12.0","direct":true,"kind":"runtime","optional":false},{"id":693279705,"package_name":"pandas","ecosystem":"pypi","requirements":"\u003e=0.19","direct":true,"kind":"runtime","optional":false},{"id":693279706,"package_name":"scikit-learn","ecosystem":"pypi","requirements":"\u003e=0.24.1","direct":true,"kind":"runtime","optional":false},{"id":693279707,"package_name":"scipy","ecosystem":"pypi","requirements":"\u003e=1.3.0","direct":true,"kind":"runtime","optional":false},{"id":693279708,"package_name":"yfinance","ecosystem":"pypi","requirements":"\u003e=0.1.55","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"setup.py","sha":null,"kind":"manifest","created_at":"2022-08-08T20:16:01.395Z","updated_at":"2022-08-08T20:16:01.395Z","repository_link":"https://github.com/PyPortfolio/PyPortfolioOpt/blob/main/setup.py","dependencies":[{"id":693280908,"package_name":"numpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/main.yml","sha":null,"kind":"manifest","created_at":"2023-01-30T22:01:10.112Z","updated_at":"2023-01-30T22:01:10.112Z","repository_link":"https://github.com/PyPortfolio/PyPortfolioOpt/blob/main/.github/workflows/main.yml","dependencies":[{"id":7256181708,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7256181712,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7256181715,"package_name":"snok/install-poetry","ecosystem":"actions","requirements":"v1.1.1","direct":true,"kind":"composite","optional":false},{"id":7256181718,"package_name":"actions/cache","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"docker","filepath":"docker/Dockerfile","sha":null,"kind":"manifest","created_at":"2023-01-30T22:01:10.156Z","updated_at":"2023-01-30T22:01:10.156Z","repository_link":"https://github.com/PyPortfolio/PyPortfolioOpt/blob/main/docker/Dockerfile","dependencies":[{"id":7256183664,"package_name":"python","ecosystem":"docker","requirements":"3.8-buster","direct":true,"kind":"build","optional":false}]}],"score":24.577014525866755,"created_at":"2025-04-11T10:21:16.823Z","updated_at":"2026-05-30T11:30:19.675Z","avatar_url":"https://github.com/PyPortfolio.png","language":"Jupyter Notebook","codemeta":null,"publiccode":null,"project_url":"https://summary.ecosyste.ms/api/v1/projects/357911","html_url":"https://summary.ecosyste.ms/projects/357911"}