
[](https://codecov.io/gh/aetperf/edsger)
[](https://edsger.readthedocs.io/en/latest/?badge=latest)
[](https://pypi.org/project/edsger/)
[](https://pepy.tech/project/edsger)
[](https://pypi.org/project/edsger/)
[](https://github.com/psf/black)
[](https://github.com/MarcoGorelli/cython-lint)
[](https://opensource.org/licenses/MIT)
# Edsger
*Graph algorithms in Cython*
Welcome to our Python library for graph algorithms. The library includes both Dijkstra's and Bellman-Ford's algorithms, with plans to add more common path algorithms later. It is also open-source and easy to integrate with other Python libraries. To get started, simply install the library using pip, and import it into your Python project.
Documentation : [https://edsger.readthedocs.io/en/latest/](https://edsger.readthedocs.io/en/latest/)
## Small example : Dijkstra's Algorithm
To use Dijkstra's algorithm, you can import the `Dijkstra` class from the `path` module. The function takes a graph and a source node as input, and returns the shortest path from the source node to all other nodes in the graph.
```python
import pandas as pd
from edsger.path import Dijkstra
# Create a DataFrame with the edges of the graph
edges = pd.DataFrame({
'tail': [0, 0, 1, 2, 2, 3],
'head': [1, 2, 2, 3, 4, 4],
'weight': [1, 4, 2, 1.5, 3, 1]
})
edges
```
| | tail | head | weight |
|---:|-------:|-------:|---------:|
| 0 | 0 | 1 | 1.0 |
| 1 | 0 | 2 | 4.0 |
| 2 | 1 | 2 | 2.0 |
| 3 | 2 | 3 | 1.5 |
| 4 | 2 | 4 | 3.0 |
| 5 | 3 | 4 | 1.0 |
```python
# Initialize the Dijkstra object
dijkstra = Dijkstra(edges)
# Run the algorithm from a source vertex
shortest_paths = dijkstra.run(vertex_idx=0)
print("Shortest paths:", shortest_paths)
```
Shortest paths: [0. 1. 3. 4.5 5.5]
We get the shortest paths from the source node 0 to all other nodes in the graph. The output is an array with the shortest path length to each node. A path length is the sum of the weights of the edges in the path.
## Bellman-Ford Algorithm: Handling Negative Weights
The Bellman-Ford algorithm can handle graphs with negative edge weights and detect negative cycles, making it suitable for more complex scenarios than Dijkstra's algorithm.
```python
from edsger.path import BellmanFord
# Create a graph with negative weights
edges_negative = pd.DataFrame({
'tail': [0, 0, 1, 1, 2, 3],
'head': [1, 2, 2, 3, 3, 4],
'weight': [1, 4, -2, 5, 1, 3] # Note the negative weight
})
edges_negative
```
| | tail | head | weight |
|---:|-------:|-------:|---------:|
| 0 | 0 | 1 | 1.0 |
| 1 | 0 | 2 | 4.0 |
| 2 | 1 | 2 | -2.0 |
| 3 | 1 | 3 | 5.0 |
| 4 | 2 | 3 | 1.0 |
| 5 | 3 | 4 | 3.0 |
```python
# Initialize and run Bellman-Ford
bf = BellmanFord(edges_negative)
shortest_paths = bf.run(vertex_idx=0)
print("Shortest paths:", shortest_paths)
```
Shortest paths: [ 0. 1. -1. 0. 3.]
The Bellman-Ford algorithm finds the optimal path even with negative weights. In this example, the shortest path from node 0 to node 2 has length -1 (going 0→1→2 with weights 1 + (-2) = -1), which is shorter than the direct path 0→2 with weight 4.
### Negative Cycle Detection
Bellman-Ford can also detect negative cycles, which indicate that no shortest path exists:
```python
# Create a graph with a negative cycle
edges_cycle = pd.DataFrame({
'tail': [0, 1, 2],
'head': [1, 2, 0],
'weight': [1, -2, -1] # Cycle 0→1→2→0 has total weight -2
})
bf_cycle = BellmanFord(edges_cycle)
try:
bf_cycle.run(vertex_idx=0)
except ValueError as e:
print("Error:", e)
```
Error: Negative cycle detected in the graph
## Installation
### Standard Installation
```bash
pip install edsger
```
## Why Use Edsger?
Edsger is designed to be **dataframe-friendly**, providing seamless integration with pandas workflows for graph algorithms. Also it is rather efficient on Linux. Our benchmarks on the USA road network (23.9M vertices, 57.7M edges) demonstrate nice performance:
<img src="https://raw.githubusercontent.com/aetperf/edsger/release/docs/source/assets/dijkstra_benchmark_comparison.png" alt="Dijkstra Performance Comparison" width="700">
## Contributing
We welcome contributions to the Edsger library. If you have any suggestions, bug reports, or feature requests, please open an issue on our [GitHub repository](https://github.com/aetperf/Edsger).
## License
Edsger is licensed under the MIT License. See the LICENSE file for more details.
## Contact
For any questions or inquiries, please contact François Pacull at [francois.pacull@architecture-performance.fr](mailto:francois.pacull@architecture-performance.fr).
Raw data
{
"_id": null,
"home_page": null,
"name": "edsger",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": "Fran\u00e7ois Pacull <francois.pacull@architecture-performance.fr>",
"keywords": "python, graph, shortest path, Dijkstra",
"author": null,
"author_email": "Fran\u00e7ois Pacull <francois.pacull@architecture-performance.fr>",
"download_url": "https://files.pythonhosted.org/packages/20/b2/b54ca4ae0652ac87be64e0c4a70d4d748733f8cbd98a2ae71b5cdb015355/edsger-0.1.5.tar.gz",
"platform": "any",
"description": "\n\n[](https://codecov.io/gh/aetperf/edsger)\n[](https://edsger.readthedocs.io/en/latest/?badge=latest)\n[](https://pypi.org/project/edsger/)\n[](https://pepy.tech/project/edsger)\n[](https://pypi.org/project/edsger/)\n[](https://github.com/psf/black)\n[](https://github.com/MarcoGorelli/cython-lint)\n[](https://opensource.org/licenses/MIT)\n\n# Edsger\n\n*Graph algorithms in Cython*\n\nWelcome to our Python library for graph algorithms. The library includes both Dijkstra's and Bellman-Ford's algorithms, with plans to add more common path algorithms later. It is also open-source and easy to integrate with other Python libraries. To get started, simply install the library using pip, and import it into your Python project.\n\nDocumentation : [https://edsger.readthedocs.io/en/latest/](https://edsger.readthedocs.io/en/latest/)\n\n## Small example : Dijkstra's Algorithm\n\nTo use Dijkstra's algorithm, you can import the `Dijkstra` class from the `path` module. The function takes a graph and a source node as input, and returns the shortest path from the source node to all other nodes in the graph.\n\n```python\nimport pandas as pd\n\nfrom edsger.path import Dijkstra\n\n# Create a DataFrame with the edges of the graph\nedges = pd.DataFrame({\n 'tail': [0, 0, 1, 2, 2, 3],\n 'head': [1, 2, 2, 3, 4, 4],\n 'weight': [1, 4, 2, 1.5, 3, 1]\n})\nedges\n```\n\n| | tail | head | weight |\n|---:|-------:|-------:|---------:|\n| 0 | 0 | 1 | 1.0 |\n| 1 | 0 | 2 | 4.0 |\n| 2 | 1 | 2 | 2.0 |\n| 3 | 2 | 3 | 1.5 |\n| 4 | 2 | 4 | 3.0 |\n| 5 | 3 | 4 | 1.0 |\n\n```python\n# Initialize the Dijkstra object\ndijkstra = Dijkstra(edges)\n\n# Run the algorithm from a source vertex\nshortest_paths = dijkstra.run(vertex_idx=0)\nprint(\"Shortest paths:\", shortest_paths)\n```\n\n Shortest paths: [0. 1. 3. 4.5 5.5]\n\nWe get the shortest paths from the source node 0 to all other nodes in the graph. The output is an array with the shortest path length to each node. A path length is the sum of the weights of the edges in the path.\n\n## Bellman-Ford Algorithm: Handling Negative Weights\n\nThe Bellman-Ford algorithm can handle graphs with negative edge weights and detect negative cycles, making it suitable for more complex scenarios than Dijkstra's algorithm.\n\n```python\nfrom edsger.path import BellmanFord\n\n# Create a graph with negative weights\nedges_negative = pd.DataFrame({\n 'tail': [0, 0, 1, 1, 2, 3],\n 'head': [1, 2, 2, 3, 3, 4],\n 'weight': [1, 4, -2, 5, 1, 3] # Note the negative weight\n})\nedges_negative\n```\n\n| | tail | head | weight |\n|---:|-------:|-------:|---------:|\n| 0 | 0 | 1 | 1.0 |\n| 1 | 0 | 2 | 4.0 |\n| 2 | 1 | 2 | -2.0 |\n| 3 | 1 | 3 | 5.0 |\n| 4 | 2 | 3 | 1.0 |\n| 5 | 3 | 4 | 3.0 |\n\n```python\n# Initialize and run Bellman-Ford\nbf = BellmanFord(edges_negative)\nshortest_paths = bf.run(vertex_idx=0)\nprint(\"Shortest paths:\", shortest_paths)\n```\n\n Shortest paths: [ 0. 1. -1. 0. 3.]\n\nThe Bellman-Ford algorithm finds the optimal path even with negative weights. In this example, the shortest path from node 0 to node 2 has length -1 (going 0\u21921\u21922 with weights 1 + (-2) = -1), which is shorter than the direct path 0\u21922 with weight 4.\n\n### Negative Cycle Detection\n\nBellman-Ford can also detect negative cycles, which indicate that no shortest path exists:\n\n```python\n# Create a graph with a negative cycle\nedges_cycle = pd.DataFrame({\n 'tail': [0, 1, 2],\n 'head': [1, 2, 0],\n 'weight': [1, -2, -1] # Cycle 0\u21921\u21922\u21920 has total weight -2\n})\n\nbf_cycle = BellmanFord(edges_cycle)\ntry:\n bf_cycle.run(vertex_idx=0)\nexcept ValueError as e:\n print(\"Error:\", e)\n```\n\n Error: Negative cycle detected in the graph\n\n## Installation\n\n### Standard Installation\n\n```bash\npip install edsger\n```\n\n## Why Use Edsger?\n\nEdsger is designed to be **dataframe-friendly**, providing seamless integration with pandas workflows for graph algorithms. Also it is rather efficient on Linux. Our benchmarks on the USA road network (23.9M vertices, 57.7M edges) demonstrate nice performance:\n\n<img src=\"https://raw.githubusercontent.com/aetperf/edsger/release/docs/source/assets/dijkstra_benchmark_comparison.png\" alt=\"Dijkstra Performance Comparison\" width=\"700\">\n\n## Contributing\n\nWe welcome contributions to the Edsger library. If you have any suggestions, bug reports, or feature requests, please open an issue on our [GitHub repository](https://github.com/aetperf/Edsger).\n\n## License\n\nEdsger is licensed under the MIT License. See the LICENSE file for more details.\n\n## Contact\n\nFor any questions or inquiries, please contact Fran\u00e7ois Pacull at [francois.pacull@architecture-performance.fr](mailto:francois.pacull@architecture-performance.fr).\n",
"bugtrack_url": null,
"license": "MIT License",
"summary": "Graph algorithms in Cython.",
"version": "0.1.5",
"project_urls": {
"Documentation": "https://edsger.readthedocs.io",
"Repository": "https://github.com/aetperf/Edsger"
},
"split_keywords": [
"python",
" graph",
" shortest path",
" dijkstra"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "910815d3c98846331439593f0710414dfdb6721fc2c8e133560eef5cf60a37c6",
"md5": "c602ecafc049a86432f1c287300ea548",
"sha256": "494ccd567eb31854cec0e4a78d943466ad15fef2e171cb1eeab515ef9eeb1caf"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp310-cp310-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "c602ecafc049a86432f1c287300ea548",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 1674454,
"upload_time": "2025-08-22T11:32:24",
"upload_time_iso_8601": "2025-08-22T11:32:24.814303Z",
"url": "https://files.pythonhosted.org/packages/91/08/15d3c98846331439593f0710414dfdb6721fc2c8e133560eef5cf60a37c6/edsger-0.1.5-cp310-cp310-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "af40d9634c4083aa7a2b3557fae5a4c58c4e49ee9b3c51eeb085740308c1d4ad",
"md5": "9f53d0395c7f6240cc047adb6028e295",
"sha256": "235aad979486545f4e147b2101d8a8de1549e09ae6b371671a009532d7b6f93d"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "9f53d0395c7f6240cc047adb6028e295",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 1637377,
"upload_time": "2025-08-22T11:32:27",
"upload_time_iso_8601": "2025-08-22T11:32:27.159832Z",
"url": "https://files.pythonhosted.org/packages/af/40/d9634c4083aa7a2b3557fae5a4c58c4e49ee9b3c51eeb085740308c1d4ad/edsger-0.1.5-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e4b448039a3f9c6cf018021947e09d522b08f32a37eb9b698fa4f59c465fea58",
"md5": "0a824554e289e536315d2a094f1b83f4",
"sha256": "0f77c55180ae5b245bdb4040ee0e71db09cdfa12f5e3d8a4c4008e7bda3c8868"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "0a824554e289e536315d2a094f1b83f4",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 4221803,
"upload_time": "2025-08-22T11:32:29",
"upload_time_iso_8601": "2025-08-22T11:32:29.353871Z",
"url": "https://files.pythonhosted.org/packages/e4/b4/48039a3f9c6cf018021947e09d522b08f32a37eb9b698fa4f59c465fea58/edsger-0.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "286751f5d1c5bdfb51603d4501dfb826179795be99dafb8fab518770dd6d1b6b",
"md5": "3146d202df13d469749810572d2027c1",
"sha256": "ee3a76aff95dc9ffa92895c987fe2c66ca4669d9d4d19316e8d816c7b0216c45"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp310-cp310-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "3146d202df13d469749810572d2027c1",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 2146990,
"upload_time": "2025-08-22T11:32:32",
"upload_time_iso_8601": "2025-08-22T11:32:32.494659Z",
"url": "https://files.pythonhosted.org/packages/28/67/51f5d1c5bdfb51603d4501dfb826179795be99dafb8fab518770dd6d1b6b/edsger-0.1.5-cp310-cp310-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8b26234462a449aa65d837227b4237eb7f94070e72e5fc746135924d5385e31b",
"md5": "4fcb439488395f5fcffc159e799bf8d9",
"sha256": "4a6341c5c27324d7c3e4c7def937544a32bbdb22ed7354ba681e6c8a216febf1"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp310-cp310-win32.whl",
"has_sig": false,
"md5_digest": "4fcb439488395f5fcffc159e799bf8d9",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 438984,
"upload_time": "2025-08-22T11:32:34",
"upload_time_iso_8601": "2025-08-22T11:32:34.278210Z",
"url": "https://files.pythonhosted.org/packages/8b/26/234462a449aa65d837227b4237eb7f94070e72e5fc746135924d5385e31b/edsger-0.1.5-cp310-cp310-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "aec22be26632bb280ef4a0bf2623209e56bc4ea5a8a623110988312412820985",
"md5": "f81320407a1922c51cae0a1d9f287829",
"sha256": "e6e39c21b28a081fdd483914162dd66401c2d687f467e66ce22c16e5ca0335da"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "f81320407a1922c51cae0a1d9f287829",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 529581,
"upload_time": "2025-08-22T11:32:35",
"upload_time_iso_8601": "2025-08-22T11:32:35.747719Z",
"url": "https://files.pythonhosted.org/packages/ae/c2/2be26632bb280ef4a0bf2623209e56bc4ea5a8a623110988312412820985/edsger-0.1.5-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d2d01177faf8b458f5b4a1543143ff221cd9cab13abf634f91cd8839fef7a020",
"md5": "c996a2ab154fed19766485aa83ccc5bf",
"sha256": "e72f92ce49337304b5281b8f88a9d0a93dea599462a83be86ebaceca049e5453"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp311-cp311-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "c996a2ab154fed19766485aa83ccc5bf",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 1672794,
"upload_time": "2025-08-22T11:32:37",
"upload_time_iso_8601": "2025-08-22T11:32:37.459357Z",
"url": "https://files.pythonhosted.org/packages/d2/d0/1177faf8b458f5b4a1543143ff221cd9cab13abf634f91cd8839fef7a020/edsger-0.1.5-cp311-cp311-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fa8d8387212b30240dc3f23a9ec9316483a9a9cbe1ec29c15dc2503d04f7a088",
"md5": "97794757a633d29607367d9c40c03e03",
"sha256": "864c7f6138516130b49cacd6d556a4713d326332482aa44660a25cca5986a5b9"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "97794757a633d29607367d9c40c03e03",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 1636750,
"upload_time": "2025-08-22T11:32:39",
"upload_time_iso_8601": "2025-08-22T11:32:39.424456Z",
"url": "https://files.pythonhosted.org/packages/fa/8d/8387212b30240dc3f23a9ec9316483a9a9cbe1ec29c15dc2503d04f7a088/edsger-0.1.5-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ee8bebb6da28af99a14a7ae288af90105454bcf343ce86fb81b3b255ea51bc2f",
"md5": "5f034bf7bc653c46745c8e8393d859d9",
"sha256": "29a55f913bf6e33bb0caa55f9cb76ee891f49ff187fa02146e372ebfce7ee9ed"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "5f034bf7bc653c46745c8e8393d859d9",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 4359341,
"upload_time": "2025-08-22T11:32:41",
"upload_time_iso_8601": "2025-08-22T11:32:41.337834Z",
"url": "https://files.pythonhosted.org/packages/ee/8b/ebb6da28af99a14a7ae288af90105454bcf343ce86fb81b3b255ea51bc2f/edsger-0.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "25f5129ea01c0b7ae243f24faf38edee84643708d13d9ee917136feea72c3844",
"md5": "a266d1bbd98e531253bc044c8046eba1",
"sha256": "13886ecfb4bc8211470eecf5a46ebb3fd69641fb9744095abc7a78ccdb9b89d8"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp311-cp311-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "a266d1bbd98e531253bc044c8046eba1",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 2154080,
"upload_time": "2025-08-22T11:32:42",
"upload_time_iso_8601": "2025-08-22T11:32:42.920666Z",
"url": "https://files.pythonhosted.org/packages/25/f5/129ea01c0b7ae243f24faf38edee84643708d13d9ee917136feea72c3844/edsger-0.1.5-cp311-cp311-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "23bc0a1ec83fb3e4a429d64ec5eaf1cd606ea3c66dcc09904acaffcd72deb5fe",
"md5": "510998585ecfaf67c5cf5a47ab8a4a50",
"sha256": "ed7b119ddc2ce02354e6e449ccc68da367ef2d10674c0785c1833b01908b4071"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "510998585ecfaf67c5cf5a47ab8a4a50",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 436686,
"upload_time": "2025-08-22T11:32:44",
"upload_time_iso_8601": "2025-08-22T11:32:44.387760Z",
"url": "https://files.pythonhosted.org/packages/23/bc/0a1ec83fb3e4a429d64ec5eaf1cd606ea3c66dcc09904acaffcd72deb5fe/edsger-0.1.5-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "471282bf84936cec4707236010c4b74fd860efdfc10355bd81f6d36a55530ab5",
"md5": "005fb498e233946fdda59a1ac60008e5",
"sha256": "341f8980ceb6db7a12ea1a7cb9a6240e7fbdf6ac6104104a0a478a4726a10931"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "005fb498e233946fdda59a1ac60008e5",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 528254,
"upload_time": "2025-08-22T11:32:45",
"upload_time_iso_8601": "2025-08-22T11:32:45.763048Z",
"url": "https://files.pythonhosted.org/packages/47/12/82bf84936cec4707236010c4b74fd860efdfc10355bd81f6d36a55530ab5/edsger-0.1.5-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2fad32478db05c747819742a599e5e2d282802383c369df71d97ae24c7eb3c62",
"md5": "2a95a9f690c9e58693da3be78d5a445d",
"sha256": "f220850beba012bd845160f496d4babf31b47108be83d185888c495443e64733"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp312-cp312-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "2a95a9f690c9e58693da3be78d5a445d",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 1663009,
"upload_time": "2025-08-22T11:32:47",
"upload_time_iso_8601": "2025-08-22T11:32:47.674892Z",
"url": "https://files.pythonhosted.org/packages/2f/ad/32478db05c747819742a599e5e2d282802383c369df71d97ae24c7eb3c62/edsger-0.1.5-cp312-cp312-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e10e71ff1d297bfb41a4244d95bc7e1509eb0182776c62cb382c00f66e4f9ec0",
"md5": "dd879462cb7d72554fcf4100140904b3",
"sha256": "2530ab78d2eb9cbce478bf5f1cde1986a394c860e0462ac83ee4015a90f6e0e8"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "dd879462cb7d72554fcf4100140904b3",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 1629749,
"upload_time": "2025-08-22T11:32:49",
"upload_time_iso_8601": "2025-08-22T11:32:49.379788Z",
"url": "https://files.pythonhosted.org/packages/e1/0e/71ff1d297bfb41a4244d95bc7e1509eb0182776c62cb382c00f66e4f9ec0/edsger-0.1.5-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "aa863870ae155f1cba45f1438ac09b8a572950a8afcd768bb4488b6ca656ec65",
"md5": "652ab54b52c28f453d38f4feb1930fdb",
"sha256": "b28fe9eaa9c7e0427d1983c59521a0f57d07e58ea15a1daba96c5bb61e33fcd8"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "652ab54b52c28f453d38f4feb1930fdb",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 4344691,
"upload_time": "2025-08-22T11:32:51",
"upload_time_iso_8601": "2025-08-22T11:32:51.157460Z",
"url": "https://files.pythonhosted.org/packages/aa/86/3870ae155f1cba45f1438ac09b8a572950a8afcd768bb4488b6ca656ec65/edsger-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c8822fcf299d1e7ab0fdf67d7945b67aa4e66918c598ff55ac912cc1d98f250b",
"md5": "9b501bb0ec89eef1fd98801cb49eb554",
"sha256": "4afdca59ebd668a21ed23a050da4a5acb98dbdd7368e6f68d0efad81f4e15f3b"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp312-cp312-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "9b501bb0ec89eef1fd98801cb49eb554",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 2109412,
"upload_time": "2025-08-22T11:32:53",
"upload_time_iso_8601": "2025-08-22T11:32:53.159169Z",
"url": "https://files.pythonhosted.org/packages/c8/82/2fcf299d1e7ab0fdf67d7945b67aa4e66918c598ff55ac912cc1d98f250b/edsger-0.1.5-cp312-cp312-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "81bc4d1f78a54a7ca35ec6794067985d8d021d0e9a42376e1216533b9d2b51ad",
"md5": "a554cbddc69993fbab93d7b3eff78231",
"sha256": "63ca46de0cbbee2c6cd5fb83e37b054773b3765ec1f7b5a166988a6b3745d88f"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp312-cp312-win32.whl",
"has_sig": false,
"md5_digest": "a554cbddc69993fbab93d7b3eff78231",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 429961,
"upload_time": "2025-08-22T11:32:54",
"upload_time_iso_8601": "2025-08-22T11:32:54.518193Z",
"url": "https://files.pythonhosted.org/packages/81/bc/4d1f78a54a7ca35ec6794067985d8d021d0e9a42376e1216533b9d2b51ad/edsger-0.1.5-cp312-cp312-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "33f1ef87bae92b91ad1fc1506230afd7e7dcf0fc1c569e0d3add7a90af066487",
"md5": "e34bbabe39105fa4700428c656e66a8e",
"sha256": "b1fecb92acf8ec087938eb9b9656f873da44d252bb15bfd8298962188d0114be"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "e34bbabe39105fa4700428c656e66a8e",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 520890,
"upload_time": "2025-08-22T11:32:55",
"upload_time_iso_8601": "2025-08-22T11:32:55.977297Z",
"url": "https://files.pythonhosted.org/packages/33/f1/ef87bae92b91ad1fc1506230afd7e7dcf0fc1c569e0d3add7a90af066487/edsger-0.1.5-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "dd471181d4f1e32ae42f3aec02ba52ae6eca3ffca8468fce3c48bd5500d512db",
"md5": "0f6aa2e97a0e9419b65f3033c91a3793",
"sha256": "a6d61ac0d09e63b0d536bfa17e316acb728319e18c05a2d48dd58608ba83d30d"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp39-cp39-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "0f6aa2e97a0e9419b65f3033c91a3793",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 1676733,
"upload_time": "2025-08-22T11:32:57",
"upload_time_iso_8601": "2025-08-22T11:32:57.682523Z",
"url": "https://files.pythonhosted.org/packages/dd/47/1181d4f1e32ae42f3aec02ba52ae6eca3ffca8468fce3c48bd5500d512db/edsger-0.1.5-cp39-cp39-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6513dbcfc771f3d41c59dde86e96362cf0fa732bb799ca3751f2ea1df2a042b2",
"md5": "a3267ac3f4e0e51150a4aac058a820c5",
"sha256": "b86cf4c55cc8a8abe96eb52e4656e6a50402faba996af4d40792a53445a4b310"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "a3267ac3f4e0e51150a4aac058a820c5",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 1639294,
"upload_time": "2025-08-22T11:32:59",
"upload_time_iso_8601": "2025-08-22T11:32:59.785161Z",
"url": "https://files.pythonhosted.org/packages/65/13/dbcfc771f3d41c59dde86e96362cf0fa732bb799ca3751f2ea1df2a042b2/edsger-0.1.5-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8c0696a769da877c00d8b1f2d97e6067af8bf922f1d77cd3b78c4f9685e2ea5c",
"md5": "644ef744cbdaebb2916c585f34bf8cbe",
"sha256": "ab4d34a4322c0b6f8d7eb7645bdb1a19a0360bb3f497307074dc7c3d989f50b8"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "644ef744cbdaebb2916c585f34bf8cbe",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 4206583,
"upload_time": "2025-08-22T11:33:01",
"upload_time_iso_8601": "2025-08-22T11:33:01.591098Z",
"url": "https://files.pythonhosted.org/packages/8c/06/96a769da877c00d8b1f2d97e6067af8bf922f1d77cd3b78c4f9685e2ea5c/edsger-0.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "dd5dd48553d7cc105948abd8a0f8e90577edd30184d4b8a815d184e2e770cc49",
"md5": "e221c41ce5c21cf18d8080198699e834",
"sha256": "0c8f92a0748caef81f8c228bfe37bfe00167a42cd9fd4413f23e19e3bc1adeb9"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp39-cp39-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "e221c41ce5c21cf18d8080198699e834",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 2148882,
"upload_time": "2025-08-22T11:33:03",
"upload_time_iso_8601": "2025-08-22T11:33:03.175127Z",
"url": "https://files.pythonhosted.org/packages/dd/5d/d48553d7cc105948abd8a0f8e90577edd30184d4b8a815d184e2e770cc49/edsger-0.1.5-cp39-cp39-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "de13f7f8f48c03310af786b2e844b0ee4cbae5793bbe2bdcd4aa98a40732727e",
"md5": "1867870009f61bcf7b6c3c2836db41cd",
"sha256": "8f4c2bb01df59132aefe3ca96d732d1f53defcd377d187b8ccf03b9b22a248ce"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp39-cp39-win32.whl",
"has_sig": false,
"md5_digest": "1867870009f61bcf7b6c3c2836db41cd",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 440020,
"upload_time": "2025-08-22T11:33:05",
"upload_time_iso_8601": "2025-08-22T11:33:05.053937Z",
"url": "https://files.pythonhosted.org/packages/de/13/f7f8f48c03310af786b2e844b0ee4cbae5793bbe2bdcd4aa98a40732727e/edsger-0.1.5-cp39-cp39-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ae81370b741ba5aaf4f83b24f888ae8f0efe94c4492000e05aea00f4a4341bda",
"md5": "986905210bd09280a607e8ddedc63374",
"sha256": "b7c00849c2bd89bd018b61336e751c2f7576a4b62ab028852baf3d06d4f52027"
},
"downloads": -1,
"filename": "edsger-0.1.5-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "986905210bd09280a607e8ddedc63374",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 530638,
"upload_time": "2025-08-22T11:33:06",
"upload_time_iso_8601": "2025-08-22T11:33:06.681749Z",
"url": "https://files.pythonhosted.org/packages/ae/81/370b741ba5aaf4f83b24f888ae8f0efe94c4492000e05aea00f4a4341bda/edsger-0.1.5-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "20b2b54ca4ae0652ac87be64e0c4a70d4d748733f8cbd98a2ae71b5cdb015355",
"md5": "7e83647627d08ee2f9bf8c5abba1e21a",
"sha256": "19f94c566f4aa38c41dd1fc74ee382cf7824dde34a90150ebf4e52475a0ff06e"
},
"downloads": -1,
"filename": "edsger-0.1.5.tar.gz",
"has_sig": false,
"md5_digest": "7e83647627d08ee2f9bf8c5abba1e21a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 1285736,
"upload_time": "2025-08-22T11:33:08",
"upload_time_iso_8601": "2025-08-22T11:33:08.197991Z",
"url": "https://files.pythonhosted.org/packages/20/b2/b54ca4ae0652ac87be64e0c4a70d4d748733f8cbd98a2ae71b5cdb015355/edsger-0.1.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-22 11:33:08",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "aetperf",
"github_project": "Edsger",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "setuptools",
"specs": []
},
{
"name": "setuptools_scm",
"specs": []
},
{
"name": "numpy",
"specs": [
[
">=",
"1.26"
]
]
},
{
"name": "Cython",
"specs": [
[
">=",
"3"
]
]
},
{
"name": "pandas",
"specs": []
}
],
"lcname": "edsger"
}