{"id":38681645,"url":"https://github.com/alesanfra/lychrel","last_synced_at":"2026-01-17T10:15:35.601Z","repository":{"id":43566392,"uuid":"349975789","full_name":"alesanfra/lychrel","owner":"alesanfra","description":"A collection of functions to play with Lychrel numbers and other funny mathematical problems","archived":false,"fork":false,"pushed_at":"2025-10-24T19:30:40.000Z","size":127,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-24T21:16:16.247Z","etag":null,"topics":["collatz-conjecture","fibonacci","kaprekar-routine","lychrel-number","mathematics","maturin","numbers","pyo3","python","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/alesanfra.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-03-21T11:18:35.000Z","updated_at":"2025-10-24T19:21:53.000Z","dependencies_parsed_at":"2025-10-24T21:09:45.157Z","dependency_job_id":"6d65801a-19e4-4b67-99bd-e995d38ddc6c","html_url":"https://github.com/alesanfra/lychrel","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/alesanfra/lychrel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alesanfra%2Flychrel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alesanfra%2Flychrel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alesanfra%2Flychrel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alesanfra%2Flychrel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alesanfra","download_url":"https://codeload.github.com/alesanfra/lychrel/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alesanfra%2Flychrel/sbom","scorecard":{"id":179430,"data":{"date":"2025-08-11","repo":{"name":"github.com/alesanfra/lychrel","commit":"51712a442de2dc20751edb7a3ea1c968012b441a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.2,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 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":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: topLevel 'contents' permission set to 'read': .github/workflows/build_and_release.yaml:19","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":"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/build_and_release.yaml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_and_release.yaml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build_and_release.yaml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_and_release.yaml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build_and_release.yaml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_and_release.yaml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_and_release.yaml:75: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build_and_release.yaml:80: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_and_release.yaml:86: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_and_release.yaml:105: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_and_release.yaml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build_and_release.yaml:110: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_and_release.yaml:116: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_and_release.yaml:132: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build_and_release.yaml:134: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_and_release.yaml:139: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_and_release.yaml:150: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build_and_release.yaml:154: update your workflow using https://app.stepsecurity.io/secureworkflow/alesanfra/lychrel/build_and_release.yaml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/build_and_release.yaml:49","Warn: pipCommand not pinned by hash: .github/workflows/build_and_release.yaml:50","Warn: pipCommand not pinned by hash: .github/workflows/build_and_release.yaml:95","Warn: pipCommand not pinned by hash: .github/workflows/build_and_release.yaml:96","Warn: pipCommand not pinned by hash: .github/workflows/build_and_release.yaml:125","Warn: pipCommand not pinned by hash: .github/workflows/build_and_release.yaml:126","Info:   0 out of  12 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   6 third-party GitHubAction dependencies pinned","Info:   0 out of   6 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":"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:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 5 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":8,"reason":"2 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-pph8-gcv7-4qj5","Warn: Project is vulnerable to: RUSTSEC-2025-0020"],"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-16T18:31:17.037Z","repository_id":43566392,"created_at":"2025-08-16T18:31:17.037Z","updated_at":"2025-08-16T18:31:17.037Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28505974,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T06:57:29.758Z","status":"ssl_error","status_checked_at":"2026-01-17T06:56:03.931Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["collatz-conjecture","fibonacci","kaprekar-routine","lychrel-number","mathematics","maturin","numbers","pyo3","python","rust"],"created_at":"2026-01-17T10:15:34.777Z","updated_at":"2026-01-17T10:15:35.595Z","avatar_url":"https://github.com/alesanfra.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Lychrel\n\n[![PyPI version](https://badge.fury.io/py/lychrel.svg)](https://badge.fury.io/py/lychrel)\n[![Documentation Status](https://readthedocs.org/projects/lychrel/badge/?version=latest)](https://lychrel.readthedocs.io/en/latest/?badge=latest)\n\nThis is a collection of high-performance Python functions implementing famous mathematical problems and algorithms, named after the fascinating [Lychrel numbers](https://en.wikipedia.org/wiki/Lychrel_number).\n\n## Why Lychrel?\n\n**Lychrel** combines the elegance of Python with the performance of Rust, using [PyO3](https://github.com/PyO3/pyo3) to provide:\n\n- 🚀 **High Performance**: Rust implementation makes computations significantly faster than pure Python\n- 🔢 **Arbitrary Precision**: Works with numbers of any size using Rust's `num-bigint`\n- 🐍 **Pythonic API**: Easy-to-use interface that feels natural in Python\n- 📦 **Zero Dependencies**: No external Python dependencies required\n- ✅ **Well Tested**: Comprehensive test suite ensuring correctness\n\nUser guide and documentation: [lychrel.readthedocs.io](https://lychrel.readthedocs.io)\n\n**Any contribution is welcome!**\n\n## Implemented algorithms\n\n### Lychrel Numbers\nFind the first palindrome of the reverse-and-add procedure and determine if a number is a [Lychrel candidate](https://en.wikipedia.org/wiki/Lychrel_number).\n\nA Lychrel number is a natural number that cannot form a palindrome through the iterative process of repeatedly reversing its digits and adding the resulting number to the original.\n\n**Functions:**\n- `is_lychrel_candidate(number, max_iterations=None)`: Check if a number is a Lychrel candidate\n- `find_lychrel_palindrome(number, max_iterations=None)`: Find the first palindrome and iteration count\n\n### Generalized Fibonacci Sequences\nAlso known as [Lucas Sequence](https://en.wikipedia.org/wiki/Lucas_sequence), this generalizes the famous Fibonacci sequence.\n\nThe sequence is defined by: `F(n) = p*F(n-1) - q*F(n-2)`\n- Standard Fibonacci: `p=1, q=-1` → `F(n) = F(n-1) + F(n-2)`\n- Lucas numbers: `p=1, q=-1` with different initial values\n- Pell numbers: `p=2, q=-1`\n\n**Function:**\n- `fibonacci(number, p=None, q=None)`: Compute the nth term of the generalized Fibonacci sequence\n\n### Read Out Loud\nGiven a number, compute the sequence of digits resulting from reading it out loud, grouping together consecutive occurrences of the same digit.\n\n**Examples:**\n- `3211` → `131221` (one 3, one 2, two 1s)\n- `1` → `11` (one 1)\n- `12` → `1112` (one 1, one 2)\n\n**Function:**\n- `look_and_say(number)`: Generate the look-and-say representation\n\n### Kaprekar's Routine\nAn iterative [algorithm](https://en.wikipedia.org/wiki/Kaprekar%27s_routine) that manipulates digits of a number in a specific base.\n\nWith each iteration:\n1. Sort the digits in descending order to form the largest possible number\n2. Sort the digits in ascending order to form the smallest possible number\n3. Subtract the smaller from the larger\n4. Repeat until a fixed point (Kaprekar constant) is reached\n\nFor 4-digit numbers in base 10, the constant is 6174 (Kaprekar's constant).\n\n**Function:**\n- `kaprekar(number, base=None, max_iterations=None)`: Apply Kaprekar's routine\n\n### Collatz Conjecture\nAlso known as the [3n+1 problem](https://en.wikipedia.org/wiki/Collatz_conjecture), one of mathematics' most famous unsolved problems.\n\nThe sequence is defined by:\n- If n is even: `n → n/2`\n- If n is odd: `n → 3n+1`\n\nThe conjecture states that this sequence always reaches 1, regardless of the starting number.\n\n**Function:**\n- `collatz(start)`: Generate the Collatz sequence for a given starting number\n\n**Example:** `collatz(5)` returns `[5, 16, 8, 4, 2, 1]`\n\n## Getting started\n\n**Lychrel** is available on [PyPi](https://pypi.org/project/lychrel/), to install it just type on your favourite shell:\n\n```shell\npip install lychrel\n```\n\n### Install from source\nIf you want to install lychrel from source code,\nclone this repo and\ncreate a **virtual environment** with python 3.7+ using your favourite tool (conda, virtualenv, etc.),\nthen follow these steps:\n\n#### 1. Install Rust\nIf you don't have Rust installed, get it from [rustup.rs](https://rustup.rs/):\n```shell\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n```\n\n#### 2. Install dev requirements\n```shell\npip install -r requirements-dev.txt\n```\n\n#### 3. Build the package\n```shell\nmaturin develop\n```\n\nFor optimal performances add the `--release` option:\n\n```shell\nmaturin develop --release\n```\n\n#### 4. Run tests\n```shell\npytest\n```\n\nTo run benchmarks:\n```shell\npytest -m benchmark\n```\n\n## Examples\n\n### Lychrel Numbers\n\nCheck whether a number is a Lychrel candidate:\n\n```python\nfrom lychrel import is_lychrel_candidate, find_lychrel_palindrome\n\n# 196 is a famous Lychrel candidate\nassert is_lychrel_candidate(196)\n\n# 197 eventually becomes a palindrome\nassert not is_lychrel_candidate(197)\n\n# Find the palindrome and iteration count\npalindrome, iterations = find_lychrel_palindrome(89)\nprint(f\"89 becomes palindrome {palindrome} after {iterations} iterations\")\n# Output: 89 becomes palindrome 8813200023188 after 24 iterations\n\n# Control maximum iterations\nis_lychrel_candidate(197, max_iterations=3)  # True (not enough iterations)\nis_lychrel_candidate(197, max_iterations=10)  # False (finds palindrome)\n```\n\n### Fibonacci Sequences\n\n```python\nfrom lychrel import fibonacci\n\n# Standard Fibonacci sequence\nprint(fibonacci(10))  # 55\n\n# Lucas sequence (p=1, q=-1, different initial values)\nprint(fibonacci(10, p=1, q=-1))  # 55\n\n# Pell numbers (p=2, q=-1)\nprint(fibonacci(10, p=2, q=-1))  # 2378\n\n# Custom parameters\nprint(fibonacci(10, p=3, q=-2))  # Custom generalized Fibonacci\n```\n\n### Kaprekar's Routine\n\n```python\nfrom lychrel import kaprekar\n\n# Classic Kaprekar's constant for 4-digit numbers\nresult = kaprekar(1234)\nprint(result)  # 6174\n\n# Different starting numbers converge to the same constant\nassert kaprekar(9876) == 6174\nassert kaprekar(4680) == 6174\n\n# You can specify a different base\nkaprekar(1234, base=10)\n\n# Control maximum iterations\nkaprekar(1234, max_iterations=100)\n```\n\n### Read Out Loud\n\n```python\nfrom lychrel import look_and_say\n\nprint(look_and_say(1))        # 11 (one 1)\nprint(look_and_say(12))       # 1112 (one 1, one 2)\nprint(look_and_say(3211))     # 131221 (one 3, one 2, two 1s)\nprint(look_and_say(2333355))  # 124325 (one 2, three 3s, two 5s)\n\n# Create sequences (Look-and-say sequence)\nn = 1\nfor _ in range(5):\n    print(n)\n    n = look_and_say(n)\n# Output:\n# 1\n# 11\n# 21\n# 1211\n# 111221\n```\n\n### Collatz Conjecture\n\n```python\nfrom lychrel import collatz\n\n# Generate the Collatz sequence\nsequence = collatz(5)\nprint(sequence)  # [5, 16, 8, 4, 2, 1]\n\n# Try with different numbers\nprint(collatz(27))  # Creates a long sequence (111 steps to reach 1!)\n\n# Find the length of the sequence\nprint(len(collatz(27)))  # 111\n\n# Visualize the sequence\nfor i, n in enumerate(collatz(10)):\n    print(f\"Step {i}: {n}\")\n```\n\n## Performance\n\nThanks to the Rust implementation, **Lychrel** provides significant performance improvements over pure Python implementations:\n\n```python\nimport time\nfrom lychrel import find_lychrel_palindrome\nfrom lychrel.py import find_lychrel_palindrome as find_lychrel_palindrome_py\n\nnumber = 89\n\n# Rust implementation\nstart = time.perf_counter()\nfor _ in range(10000):\n    find_lychrel_palindrome(number)\nrust_time = time.perf_counter() - start\n\n# Pure Python implementation\nstart = time.perf_counter()\nfor _ in range(10000):\n    find_lychrel_palindrome_py(number)\npython_time = time.perf_counter() - start\n\nprint(f\"Speedup: {python_time / rust_time:.1f}x faster\")\n# Typical output: Speedup: 20-50x faster\n```\n\nCheck out the tests for more examples.\n\n## Requirements\n\n- **Python**: 3.7 or higher\n- **Rust**: Only required for building from source\n\n### Supported Platforms\n\nPre-built wheels are available for:\n- **Linux** (x86_64, aarch64)\n- **macOS** (x86_64, aarch64/Apple Silicon)\n- **Windows** (x86_64)\n\nFor other platforms, the package will be built from source automatically if Rust is installed.\n\n## Contributing\n\nContributions are welcome! Here are some ways you can contribute:\n\n### 🐛 Bug Reports\nIf you find a bug, please open an issue with:\n- A clear description of the problem\n- Steps to reproduce\n- Expected vs actual behavior\n- Python and package version\n\n### 💡 Feature Requests\nHave an idea for a new mathematical problem to implement? Open an issue to discuss it!\n\n### 🔧 Pull Requests\n\n1. Fork the repository\n2. Create a new branch: `git checkout -b feature/your-feature-name`\n3. Make your changes\n4. Add tests for new functionality\n5. Ensure all tests pass: `pytest`\n6. Format your code:\n   ```shell\n   # Python code\n   black .\n   isort .\n\n   # Rust code\n   cargo fmt\n   ```\n7. Submit a pull request\n\n### Development Setup\n\n```shell\n# Clone the repository\ngit clone https://github.com/alesanfra/lychrel.git\ncd lychrel\n\n# Create a virtual environment\npython -m venv .venv\nsource .venv/bin/activate  # On Windows: .venv\\Scripts\\activate\n\n# Install development dependencies\npip install -r requirements-dev.txt\n\n# Build the package in development mode\nmaturin develop --release\n\n# Run tests\npytest\n\n# Run benchmarks\npytest -m benchmark\n```\n\n### Code Style\n\n- **Python**: Follow PEP 8, use `black` and `isort` for formatting\n- **Rust**: Follow Rust conventions, use `cargo fmt` and `cargo clippy`\n- **Documentation**: Add docstrings to all public functions\n- **Tests**: Write tests for all new functionality\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Acknowledgments\n\n- Built with [PyO3](https://github.com/PyO3/pyo3) - Rust bindings for Python\n- Uses [maturin](https://github.com/PyO3/maturin) for building and packaging\n- Inspired by various mathematical curiosities and number theory problems\n\n## References\n\n- [Lychrel Numbers](https://en.wikipedia.org/wiki/Lychrel_number)\n- [Lucas Sequences](https://en.wikipedia.org/wiki/Lucas_sequence)\n- [Kaprekar's Routine](https://en.wikipedia.org/wiki/Kaprekar%27s_routine)\n- [Collatz Conjecture](https://en.wikipedia.org/wiki/Collatz_conjecture)\n- [Look-and-say Sequence](https://en.wikipedia.org/wiki/Look-and-say_sequence)\n\n## Related Projects\n\n- [num-bigint](https://github.com/rust-num/num-bigint) - Arbitrary precision integers in Rust\n- [PyO3](https://github.com/PyO3/pyo3) - Rust bindings for Python\n- [maturin](https://github.com/PyO3/maturin) - Build and publish Rust-based Python packages\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falesanfra%2Flychrel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falesanfra%2Flychrel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falesanfra%2Flychrel/lists"}