{"id":34071188,"url":"https://github.com/codezonediitj/pydatastructs","last_synced_at":"2025-12-14T07:59:32.201Z","repository":{"id":36583500,"uuid":"192332885","full_name":"codezonediitj/pydatastructs","owner":"codezonediitj","description":"A python package for data structures and algorithms","archived":false,"fork":false,"pushed_at":"2025-10-22T15:55:13.000Z","size":680,"stargazers_count":212,"open_issues_count":169,"forks_count":314,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-10-22T17:33:23.617Z","etag":null,"topics":["algorithms","algorithms-and-data-structures","closember","computer-science","data-structures","hacktoberfest","python3","sports-programming"],"latest_commit_sha":null,"homepage":"https://pydatastructs.readthedocs.io/en/stable/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codezonediitj.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-06-17T11:23:01.000Z","updated_at":"2025-10-22T15:55:18.000Z","dependencies_parsed_at":"2024-08-01T08:13:47.440Z","dependency_job_id":"04f716e0-6e4c-49b9-a913-c542e3093a4d","html_url":"https://github.com/codezonediitj/pydatastructs","commit_stats":{"total_commits":222,"total_committers":57,"mean_commits":"3.8947368421052633","dds":0.6711711711711712,"last_synced_commit":"ec0b0158852cd2ea6ce23a2989113e69269f3481"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/codezonediitj/pydatastructs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codezonediitj%2Fpydatastructs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codezonediitj%2Fpydatastructs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codezonediitj%2Fpydatastructs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codezonediitj%2Fpydatastructs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codezonediitj","download_url":"https://codeload.github.com/codezonediitj/pydatastructs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codezonediitj%2Fpydatastructs/sbom","scorecard":{"id":298077,"data":{"date":"2025-08-11","repo":{"name":"github.com/codezonediitj/pydatastructs","commit":"79c4328dadc88484ef0694d8c108757e466076c7"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.1,"checks":[{"name":"Maintained","score":5,"reason":"7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5","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":9,"reason":"Found 28/30 approved changesets -- score normalized to 9","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":"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/ci.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":"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":"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/ci.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/codezonediitj/pydatastructs/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/codezonediitj/pydatastructs/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/codezonediitj/pydatastructs/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:87: update your workflow using https://app.stepsecurity.io/secureworkflow/codezonediitj/pydatastructs/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:90: update your workflow using https://app.stepsecurity.io/secureworkflow/codezonediitj/pydatastructs/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:128: update your workflow using https://app.stepsecurity.io/secureworkflow/codezonediitj/pydatastructs/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:131: update your workflow using https://app.stepsecurity.io/secureworkflow/codezonediitj/pydatastructs/ci.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:96","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:100","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:101","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:137","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:141","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:142","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:30","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:34","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:35","Info:   0 out of   6 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2022-238 / GHSA-h3qr-fjhm-jphw"],"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":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 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-17T20:01:19.613Z","repository_id":36583500,"created_at":"2025-08-17T20:01:19.613Z","updated_at":"2025-08-17T20:01:19.613Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27722579,"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-12-14T02:00:11.348Z","response_time":56,"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":["algorithms","algorithms-and-data-structures","closember","computer-science","data-structures","hacktoberfest","python3","sports-programming"],"created_at":"2025-12-14T07:59:31.550Z","updated_at":"2025-12-14T07:59:32.185Z","avatar_url":"https://github.com/codezonediitj.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"PyDataStructs\n=============\n\n[![Build Status](https://github.com/codezonediitj/pydatastructs/actions/workflows/ci.yml/badge.svg)](https://github.com/codezonediitj/pydatastructs/actions) [![Discord](https://badgen.net/badge/icon/discord?icon=discord\u0026label)](https://discord.gg/PwY7wQDG5G) [![Join the chat at https://gitter.im/codezonediitj/pydatastructs](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/codezoned2017/Lobby) [![Discuss at pydatastructs@googlegroups.com](https://img.shields.io/badge/discuss-pydatastructs%40googlegroups.com-blue.svg)](https://groups.google.com/forum/#!forum/pydatastructs) [![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/codezonediitj/pydatastructs/pulls) [![codecov](https://codecov.io/gh/codezonediitj/pydatastructs/branch/master/graph/badge.svg)](https://codecov.io/gh/codezonediitj/pydatastructs)\n\nAbout\n-----\n\n- **PyDataStructs** project aims to be a Python package for various data structures and algorithms (including their parallel implementations).\n\n- We are also working on providing C++ backend via Python C-API for high performance use cases.\n\nWhy PyDataStructs?\n-------------------\n\n- **Single package for all your data structures and algorithms**\n\n- **Consistent and Clean Interface** - The APIs we have provided are consistent with each other, clean, and easy to use. We make sure of that before adding any new data structure or algorithm.\n\n- **Well Tested** - We thoroughly test our code before making any new addition to PyDataStructs. 99 percent lines of our code have already been tested by us.\n\nInstallation\n------------\n\nIf you are using Anaconda/Mamba, you can setup your development environment by executing the following commands,\n\n```bash\nconda env create --file environment.yml\nconda activate pyds-env\n```\n\nYou can install the library by running the following command,\n\n```python\npython scripts/build/install.py\n```\n\nFor development purposes i.e., if you intend to be a contributor,\n\n```python\npython scripts/build/develop.py\n```\n\nMake sure you change your working directory to `pydatastructs` before executing any of the above commands. Also, your python version should be at least `3.8`.\n\nTesting\n-------\n\nFor testing your patch locally follow the steps given below,\n\n1. Install [pytest-cov](https://pypi.org/project/pytest-cov/). Skip this step if you are already having the package.\n2. Run, `python3 -m pytest --doctest-modules --cov=./ --cov-report=html`. Look for, `htmlcov/index.html` and open it in your browser, which will show the coverage report. Try to ensure that the coverage is not decreasing by more than 1% for your patch.\n\nFor a good visualisation of the different data structures and algorithms, refer the following websites:\n\n- \u003chttps://visualgo.net/\u003e\n- \u003chttps://www.cs.usfca.edu/~galles/visualization/\u003e\n\nYou can use the examples given in the following book as tests for your code:\n\n- [https://opendatastructures.org/ods-python.pdf](https://opendatastructures.org/ods-python.pdf)\n\n### Light weighted testing (without benchmarks)\n\nMake sure you have activated the conda environment: `pyds-env` and your working directory is `../pydatastructs`.\n\nIn the terminal, run: `python -c \"from pydatastructs.utils.testing_util import test; test()\"`.\n\nThis will run all the test files, except benchmark tests. This should be used if benchmark tests are computationally too heavy to be run on your local machine.\n\nWhy do we use Python?\n------------------\n\n- As we know Python is an interpreted language and hence executing programs in it is slower as compared to C++.\n\n- We still decided to use Python because the software development can happen at a much faster pace and it is much easier to test various software designs and APIs as coding them out takes no time in Python.\n\n- However, keeping the need of the users in mind, we are also working on providing a C++ backend,  which will happen quickly as we would be required to just translate the tested code rather than writing it from scratch.\n\nHow to contribute?\n------------------\n\nFollow the steps given below,\n\n1. Fork, \u003chttps://github.com/codezonediitj/pydatastructs/\u003e\n2. Execute, `git clone https://github.com/codezonediitj/pydatastructs/`\n3. Change your working directory to `../pydatastructs`.\n4. Execute, `git remote add origin_user https://github.com/\u003cyour-github-username\u003e/pydatastructs/`\n5. Execute, `git checkout -b \u003cyour-new-branch-for-working\u003e`.\n6. Make changes to the code.\n7. Add your name and email to the AUTHORS, if you wish to.\n8. Execute, `git add .`.\n9. Execute, `git commit -m \"your-commit-message\"`.\n10. Execute, `git push origin_user \u003cyour-current-branch\u003e`.\n11. Make PR.\n\nThat's it, 10 easy steps for your first contribution. For future contributions just follow steps 5 to 10. Make sure that before starting work, always checkout to master and pull the recent changes using the remote `origin` and then start following steps 5 to 10.\n\nSee you soon with your first PR.\n\nIt is recommended to go through the following links before you start working.\n\n- [Issue Policy](https://github.com/codezonediitj/pydatastructs/wiki/Issue-Policy)\n- [Pull Request Policy](https://github.com/codezonediitj/pydatastructs/wiki/Pull-Request-Policy)\n- [Plan of Action for the Projects](https://github.com/codezonediitj/pydatastructs/wiki/Plan-of-Action-for-the-Projects)\n\nGuidelines\n----------\n\nWe recommend you to join our [discord channel](https://discord.gg/PwY7wQDG5G) for discussing anything related to the project.\n\nPlease follow the rules and guidelines given below,\n\n1. Follow the [numpydoc docstring guide](https://numpydoc.readthedocs.io/en/latest/format.html).\n2. If you are planning to contribute a new data structure then first raise an **issue** for discussing the API, rather than directly making a PR. Please go through [Plan of Action for Adding New Data Structures](https://github.com/codezonediitj/pydatastructs/wiki/Plan-of-Action-for-Adding-New-Data-Structures).\n3. For the first-time contributors we recommend not to take a complex data structure, rather start with `beginner` or `easy`.\n4. We don't assign issues to any individual. Instead, we follow First Come First Serve for taking over issues, i.e., if one contributor has already shown interest then no comment should be made after that as it won't be considered. Anyone willing to work on an issue can comment on the thread that he/she is working on and raise a PR for the same.\n5. Any open PR must be provided with some updates after being reviewed. If it is stalled for more than 4 days, it will be labeled as `Please take over`, meaning that anyone willing to continue that PR can start working on it.\n6. PRs that are not related to the project or don't follow any guidelines will be labeled as `Could Close`, meaning that the PR is not necessary at the moment.\n\nThe following parameters are to be followed to pass the code quality tests for your Pull Requests,\n\n1. There should not be any trailing white spaces at any line of code.\n2. Each `.py` file should end with exactly one new line.\n3. Comparisons involving `True`, `False`, and `None` should be done by\nreference (using `is`, `is not`) and not by value(`==`, `!=`).\n\nKeep contributing!!\n\nThanks to these wonderful people ✨✨:\n\n![https://github.com/codezonediitj/pydatastructs/graphs/contributors](https://contrib.rocks/image?repo=codezonediitj/pydatastructs)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodezonediitj%2Fpydatastructs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodezonediitj%2Fpydatastructs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodezonediitj%2Fpydatastructs/lists"}