<div align="center">
<img src="res/logo.png" alt="logo" style="width: 40%;">
<strong>Rapid Enhanced Multi-objective Community Detection Algorithm</strong>
![PyPI - Implementation](https://img.shields.io/pypi/implementation/re_mocd)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/re_mocd)
![PyPI - Downloads](https://img.shields.io/pypi/dm/re_mocd)
[![PyPI - Stats](https://img.shields.io/badge/More%20Info-F58025?logo=PyPi)](https://pypistats.org/packages/re_mocd)
</div>
> [!IMPORTANT]
> **re-mocd** is an open source Rust-based library designed to provide a simple and easy-to-use multi-objective algorithm for efficient and high-performance community detection on graphs. You can use it to make tests on your own graphs, or to make comparisons, be free ☺
---
## Installation
### Via PyPI
Install the library using pip:
```bash
pip install re-mocd
```
---
## Usage
### From `networkx.Graph()`
Using **re-mocd** with a `networkx.Graph()` is simple. For example:
```python
import networkx as nx
import re_mocd
# Create a graph
G = nx.Graph([
(0, 1), (0, 3), (0, 7),
(1, 2), (1, 3), (1, 5),
(2, 3),
(3, 6),
(4, 5), (4, 6),
(5, 6),
(7, 8)
])
# Random networks help validate the detection of overlapping communities
# by serving as a baseline for comparison. These structures appear as significant
# deviations from the expected behavior in unorganized networks, allowing the method
# to highlight more complex patterns, such as overlapping communities.
# However, generating random networks and their Pareto fronts increases the runtime.
# Higher values are recommended for large numbers of overlapping communities
random_networks = 3
# The main function that will perform the search for communities in the graph.
# If you want a fast search, keep the number of random networks low.
partition = re_mocd.rmocd(G, random_networks)
# You can see its fitness function using the function below.
# (check section "Fitness Function" to see how it is calculated).
mod = re_mocd.modularity(G, partition)
```
### Examples
- [Plotting Example](tests/python/example.py)
- [Comparison with Other Algorithms](tests/python/main.py)
- [Modularity ring problem](tests/python/benchmarks/ring.py)
- [Single file test](tests/python/benchmarks/single.py)
---
<center>
<img src="res/example.png" alt="Example Plot" width="600">
</center>
---
## Running from Scratch
### Build and Run
1. Clone the repository:
```bash
git clone https://github.com/0l1ve1r4/re_mocd
cd re_mocd
```
2. Rename main (it is like this to avoid unused warnings):
```bash
mv cli.rs main.rs
```
3. Compile and execute the algorithm:
```bash
cargo run --release mygraph.edgelist
```
### Debug Mode
Use the `-d` flag for additional debug output:
```bash
cargo run --release mygraph.edgelist -d
```
---
### Fitness Function
1. **Intra Objective:** Maximize the density of connections within communities:
$$\text{intra}(C) = 1 - \frac{\sum_{c \in C} |E(c)|}{m}$$
2. **Inter Objective:** Minimize the strength of connections between communities:
$$\text{inter}(C) = \sum_{c \in C} \left( \frac{\sum_{v \in c} \text{deg}(v)}{2m} \right)^2$$
3. **Modularity Function:** Combines both:
$$Q(C) = 1 - \text{intra}(C) - \text{inter}(C)$$
These two conflicting objectives balance the density of internal connections and the sparsity of external connections. They are optimized simultaneously.
### Contributing
Contributions are welcome! Feel free to submit issues, feature requests, or pull requests to improve the project.
**License:** GPL-3.0 or later
**Author:** [Guilherme Santos](https://github.com/0l1ve1r4)
Raw data
{
"_id": null,
"home_page": null,
"name": "re-mocd",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "rust, python, community detection, multi-objective optimization, graph analysis",
"author": "Guilherme Santos",
"author_email": "Guilherme Santos <gs.oliveira.dev@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/61/c1/ba46817284d53ba672cb64547692837147e6096235543ac6086ca2092ce5/re_mocd-0.1.5.tar.gz",
"platform": null,
"description": "<div align=\"center\">\n <img src=\"res/logo.png\" alt=\"logo\" style=\"width: 40%;\"> \n\n <strong>Rapid Enhanced Multi-objective Community Detection Algorithm</strong>\n\n![PyPI - Implementation](https://img.shields.io/pypi/implementation/re_mocd)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/re_mocd)\n![PyPI - Downloads](https://img.shields.io/pypi/dm/re_mocd)\n[![PyPI - Stats](https://img.shields.io/badge/More%20Info-F58025?logo=PyPi)](https://pypistats.org/packages/re_mocd)\n\n</div>\n\n> [!IMPORTANT] \n> **re-mocd** is an open source Rust-based library designed to provide a simple and easy-to-use multi-objective algorithm for efficient and high-performance community detection on graphs. You can use it to make tests on your own graphs, or to make comparisons, be free \u263a\n\n\n---\n\n## Installation \n\n### Via PyPI \n\nInstall the library using pip: \n```bash\npip install re-mocd\n```\n\n---\n\n## Usage \n\n### From `networkx.Graph()` \n\nUsing **re-mocd** with a `networkx.Graph()` is simple. For example: \n```python\nimport networkx as nx \nimport re_mocd\n\n# Create a graph\nG = nx.Graph([\n (0, 1), (0, 3), (0, 7), \n (1, 2), (1, 3), (1, 5), \n (2, 3), \n (3, 6), \n (4, 5), (4, 6), \n (5, 6), \n (7, 8)\n])\n\n# Random networks help validate the detection of overlapping communities \n# by serving as a baseline for comparison. These structures appear as significant \n# deviations from the expected behavior in unorganized networks, allowing the method\n# to highlight more complex patterns, such as overlapping communities. \n# However, generating random networks and their Pareto fronts increases the runtime. \n# Higher values \u200b\u200bare recommended for large numbers of overlapping communities\nrandom_networks = 3\n\n# The main function that will perform the search for communities in the graph. \n# If you want a fast search, keep the number of random networks low.\npartition = re_mocd.rmocd(G, random_networks)\n\n# You can see its fitness function using the function below. \n# (check section \"Fitness Function\" to see how it is calculated).\nmod = re_mocd.modularity(G, partition)\n```\n\n### Examples \n\n- [Plotting Example](tests/python/example.py) \n- [Comparison with Other Algorithms](tests/python/main.py) \n- [Modularity ring problem](tests/python/benchmarks/ring.py)\n- [Single file test](tests/python/benchmarks/single.py)\n\n---\n\n<center> \n<img src=\"res/example.png\" alt=\"Example Plot\" width=\"600\"> \n</center> \n\n---\n\n## Running from Scratch \n\n### Build and Run \n\n1. Clone the repository: \n ```bash\n git clone https://github.com/0l1ve1r4/re_mocd\n cd re_mocd\n ```\n\n2. Rename main (it is like this to avoid unused warnings):\n ```bash\n mv cli.rs main.rs\n ```\n\n3. Compile and execute the algorithm: \n ```bash\n cargo run --release mygraph.edgelist\n ```\n\n### Debug Mode \n\nUse the `-d` flag for additional debug output: \n```bash\ncargo run --release mygraph.edgelist -d\n```\n\n---\n\n### Fitness Function\n\n1. **Intra Objective:** Maximize the density of connections within communities:\n\n $$\\text{intra}(C) = 1 - \\frac{\\sum_{c \\in C} |E(c)|}{m}$$\n\n2. **Inter Objective:** Minimize the strength of connections between communities:\n\n $$\\text{inter}(C) = \\sum_{c \\in C} \\left( \\frac{\\sum_{v \\in c} \\text{deg}(v)}{2m} \\right)^2$$\n\n3. **Modularity Function:** Combines both:\n\n $$Q(C) = 1 - \\text{intra}(C) - \\text{inter}(C)$$\n\n\nThese two conflicting objectives balance the density of internal connections and the sparsity of external connections. They are optimized simultaneously.\n\n\n### Contributing \n\nContributions are welcome! Feel free to submit issues, feature requests, or pull requests to improve the project. \n\n**License:** GPL-3.0 or later \n**Author:** [Guilherme Santos](https://github.com/0l1ve1r4) \n",
"bugtrack_url": null,
"license": "GPL-3.0-or-later",
"summary": "Rapid multi-objective community detection algorithm with parallel computation and caching to efficiently handle large-scale graphs. With networkx compatibility",
"version": "0.1.5",
"project_urls": {
"Issues": "https://github.com/0l1ve1r4/re_mocd/issues",
"Repository": "https://github.com/0l1ve1r4/re_mocd"
},
"split_keywords": [
"rust",
" python",
" community detection",
" multi-objective optimization",
" graph analysis"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "b2fe2d19583d2f68eca2370dd5bb6c392e30674d30d52a5757935452c98e59eb",
"md5": "19cbc3af8a423bd8635de4fd702b41b9",
"sha256": "dbc06f47758474e3b86bab1262a6559ca72f002f206a8aa57a0894b771a82f1e"
},
"downloads": -1,
"filename": "re_mocd-0.1.5-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "19cbc3af8a423bd8635de4fd702b41b9",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 342033,
"upload_time": "2025-01-07T21:50:42",
"upload_time_iso_8601": "2025-01-07T21:50:42.714028Z",
"url": "https://files.pythonhosted.org/packages/b2/fe/2d19583d2f68eca2370dd5bb6c392e30674d30d52a5757935452c98e59eb/re_mocd-0.1.5-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8fa7d9845fbcccdc389a8bca945ce9ffb4b0b2e2c890d4162df55123f57865d2",
"md5": "e4df4b4f7f9f40775e508b3cf59f87c5",
"sha256": "b1682353d371086d59da89627babc73c7aa5a48bd5f2ae10e08269b38f5bbb85"
},
"downloads": -1,
"filename": "re_mocd-0.1.5-cp310-cp310-manylinux_2_34_x86_64.whl",
"has_sig": false,
"md5_digest": "e4df4b4f7f9f40775e508b3cf59f87c5",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 388519,
"upload_time": "2025-01-07T21:50:45",
"upload_time_iso_8601": "2025-01-07T21:50:45.095892Z",
"url": "https://files.pythonhosted.org/packages/8f/a7/d9845fbcccdc389a8bca945ce9ffb4b0b2e2c890d4162df55123f57865d2/re_mocd-0.1.5-cp310-cp310-manylinux_2_34_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "76990f194431e0430bdafe5596bb92b1f4c9e0593d457a73972ae562999b0cbb",
"md5": "debdfb7b1e5531ae395b931e12167380",
"sha256": "38591741d7f68971887efdf5132b4c480ff579d0fb9172a9e7cc8bae77c7fff4"
},
"downloads": -1,
"filename": "re_mocd-0.1.5-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "debdfb7b1e5531ae395b931e12167380",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 293313,
"upload_time": "2025-01-07T21:50:46",
"upload_time_iso_8601": "2025-01-07T21:50:46.897423Z",
"url": "https://files.pythonhosted.org/packages/76/99/0f194431e0430bdafe5596bb92b1f4c9e0593d457a73972ae562999b0cbb/re_mocd-0.1.5-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "dfd496471a3bf5fb0e6ce5438cd6f01ab1f7dba4ea5830fc89181dd1474e053e",
"md5": "1a2bf1bbabb23b84f40b5748fdbda9fc",
"sha256": "81be7fed99155896c994d2565f86d87972d24d199f8903d571603f8db7d74834"
},
"downloads": -1,
"filename": "re_mocd-0.1.5-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "1a2bf1bbabb23b84f40b5748fdbda9fc",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 342040,
"upload_time": "2025-01-07T21:50:49",
"upload_time_iso_8601": "2025-01-07T21:50:49.695720Z",
"url": "https://files.pythonhosted.org/packages/df/d4/96471a3bf5fb0e6ce5438cd6f01ab1f7dba4ea5830fc89181dd1474e053e/re_mocd-0.1.5-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "97c281a6a93797a0a0808b9cb1749a2033802308a37695da397412394ee54ec8",
"md5": "4a012fdf06a480e962c45105285e6426",
"sha256": "ac9c254dadef072634a0f82993134909a1c317c4410d753ea8c502b4aa976891"
},
"downloads": -1,
"filename": "re_mocd-0.1.5-cp311-cp311-manylinux_2_34_x86_64.whl",
"has_sig": false,
"md5_digest": "4a012fdf06a480e962c45105285e6426",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 388379,
"upload_time": "2025-01-07T21:50:51",
"upload_time_iso_8601": "2025-01-07T21:50:51.153547Z",
"url": "https://files.pythonhosted.org/packages/97/c2/81a6a93797a0a0808b9cb1749a2033802308a37695da397412394ee54ec8/re_mocd-0.1.5-cp311-cp311-manylinux_2_34_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "28b7ed4b334181220f55adf56414cacdee2e5eb784afe67f8ed3d0b51a18fe17",
"md5": "30289791256098ee597105839859b55f",
"sha256": "e2777570b8fe7327ac3506ace827f0ac9de1cf6af48081667ffc21205b9369b6"
},
"downloads": -1,
"filename": "re_mocd-0.1.5-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "30289791256098ee597105839859b55f",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 293322,
"upload_time": "2025-01-07T21:50:52",
"upload_time_iso_8601": "2025-01-07T21:50:52.658341Z",
"url": "https://files.pythonhosted.org/packages/28/b7/ed4b334181220f55adf56414cacdee2e5eb784afe67f8ed3d0b51a18fe17/re_mocd-0.1.5-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3629afe66e82b260eb331303179dc0978558a3d56582896144383c49f45634d0",
"md5": "30a44b87ca4128f22feaa64fdd56e6fb",
"sha256": "e4ffd7cdda88b2bd653039e4379b101ea0b55c605b5609eec14c772aec8b7fad"
},
"downloads": -1,
"filename": "re_mocd-0.1.5-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "30a44b87ca4128f22feaa64fdd56e6fb",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 340308,
"upload_time": "2025-01-07T21:50:55",
"upload_time_iso_8601": "2025-01-07T21:50:55.333954Z",
"url": "https://files.pythonhosted.org/packages/36/29/afe66e82b260eb331303179dc0978558a3d56582896144383c49f45634d0/re_mocd-0.1.5-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6d53b67418d49f766ac53add0287c1e968db4be9f83dafb0fe9fd57e98ca84e7",
"md5": "55086d6f0306edb79cc3efd382401c74",
"sha256": "1cabf0a653f1ec8dc5540eb1cbca6ba95e703249ade39639308531379fa59fdf"
},
"downloads": -1,
"filename": "re_mocd-0.1.5-cp312-cp312-manylinux_2_34_x86_64.whl",
"has_sig": false,
"md5_digest": "55086d6f0306edb79cc3efd382401c74",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 387853,
"upload_time": "2025-01-07T21:50:56",
"upload_time_iso_8601": "2025-01-07T21:50:56.437586Z",
"url": "https://files.pythonhosted.org/packages/6d/53/b67418d49f766ac53add0287c1e968db4be9f83dafb0fe9fd57e98ca84e7/re_mocd-0.1.5-cp312-cp312-manylinux_2_34_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4632ef66fc5cff7c83ed2093403e8bbd89c1f641bedd58e479813e8cd63172ed",
"md5": "3782c04a490d26d27249261ec3659c50",
"sha256": "3f89bd27a97303871c4c36aa48ec21dddba6c81dd09362eab3b05d8b9263373c"
},
"downloads": -1,
"filename": "re_mocd-0.1.5-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "3782c04a490d26d27249261ec3659c50",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 293114,
"upload_time": "2025-01-07T21:50:58",
"upload_time_iso_8601": "2025-01-07T21:50:58.911071Z",
"url": "https://files.pythonhosted.org/packages/46/32/ef66fc5cff7c83ed2093403e8bbd89c1f641bedd58e479813e8cd63172ed/re_mocd-0.1.5-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1c10d62a386eac2197479048b36c3a178929d935924f371b9d9c92c27970abb6",
"md5": "92b90bd2c46cf447b76c3e0d309a9ff0",
"sha256": "f89c4a6f5ad6692e8f8c040771ff28af8cc9d27cd2fc29d046c952043dcc2b12"
},
"downloads": -1,
"filename": "re_mocd-0.1.5-cp38-cp38-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "92b90bd2c46cf447b76c3e0d309a9ff0",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 341912,
"upload_time": "2025-01-07T21:51:01",
"upload_time_iso_8601": "2025-01-07T21:51:01.377052Z",
"url": "https://files.pythonhosted.org/packages/1c/10/d62a386eac2197479048b36c3a178929d935924f371b9d9c92c27970abb6/re_mocd-0.1.5-cp38-cp38-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d68ff0030534b4a707ac6b0422c737cba7c80f40466dae9f41a46479ca283980",
"md5": "5ed52aaefb5c8aa1fc3249bca793319c",
"sha256": "2d64a153a5e785a5a2090e6ab1d9366e69a440ee145952048792a3427f3a3554"
},
"downloads": -1,
"filename": "re_mocd-0.1.5-cp38-cp38-manylinux_2_34_x86_64.whl",
"has_sig": false,
"md5_digest": "5ed52aaefb5c8aa1fc3249bca793319c",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 388653,
"upload_time": "2025-01-07T21:51:03",
"upload_time_iso_8601": "2025-01-07T21:51:03.312086Z",
"url": "https://files.pythonhosted.org/packages/d6/8f/f0030534b4a707ac6b0422c737cba7c80f40466dae9f41a46479ca283980/re_mocd-0.1.5-cp38-cp38-manylinux_2_34_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e205bf793195ffabb5b199d8ee5bdfbe7b3c4f1ba8b815a39ac2501e6f334afd",
"md5": "16a10a9d031638527bd8fad85092336e",
"sha256": "8164b6719c7a30d1d03fe04fa428772d904c9dfe6f9be5bdcd1b1d3e813e7ac3"
},
"downloads": -1,
"filename": "re_mocd-0.1.5-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "16a10a9d031638527bd8fad85092336e",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 293551,
"upload_time": "2025-01-07T21:51:05",
"upload_time_iso_8601": "2025-01-07T21:51:05.926092Z",
"url": "https://files.pythonhosted.org/packages/e2/05/bf793195ffabb5b199d8ee5bdfbe7b3c4f1ba8b815a39ac2501e6f334afd/re_mocd-0.1.5-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "08df616a7b6ec4314d44a0ba1bb5707c21127a9723bd6dbb718671182a1b21fc",
"md5": "1f2718b706c41e5d0037edeec047ee74",
"sha256": "73f188a71b1d624f87be7bff77a8966314b2fe5d09a9f8546de6b4bdc8aa53a1"
},
"downloads": -1,
"filename": "re_mocd-0.1.5-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "1f2718b706c41e5d0037edeec047ee74",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 341953,
"upload_time": "2025-01-07T21:51:11",
"upload_time_iso_8601": "2025-01-07T21:51:11.004590Z",
"url": "https://files.pythonhosted.org/packages/08/df/616a7b6ec4314d44a0ba1bb5707c21127a9723bd6dbb718671182a1b21fc/re_mocd-0.1.5-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "db9e3490ce175fbad45dbc605b60b69b8d3802c8baab0cb95c2cf9ca200aa44c",
"md5": "b794ae27e7cf3422ebfce1836c6986f7",
"sha256": "9009e343d9967173d0a4745f1492d5f751d7a2f84681e1cfccbf91a24bee33d1"
},
"downloads": -1,
"filename": "re_mocd-0.1.5-cp39-cp39-manylinux_2_34_x86_64.whl",
"has_sig": false,
"md5_digest": "b794ae27e7cf3422ebfce1836c6986f7",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 388846,
"upload_time": "2025-01-07T21:51:13",
"upload_time_iso_8601": "2025-01-07T21:51:13.927640Z",
"url": "https://files.pythonhosted.org/packages/db/9e/3490ce175fbad45dbc605b60b69b8d3802c8baab0cb95c2cf9ca200aa44c/re_mocd-0.1.5-cp39-cp39-manylinux_2_34_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ad23a2d7a4745518046d89aeca850969e2655d845faaadb470b37a1207b027e3",
"md5": "1447ddb0052de0dc1f4b24452688695c",
"sha256": "da90aa6ed0da33100b1770c9a1d28bba4c8bafd00e5c4ac52f619824850b5232"
},
"downloads": -1,
"filename": "re_mocd-0.1.5-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "1447ddb0052de0dc1f4b24452688695c",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 293694,
"upload_time": "2025-01-07T21:51:17",
"upload_time_iso_8601": "2025-01-07T21:51:17.738604Z",
"url": "https://files.pythonhosted.org/packages/ad/23/a2d7a4745518046d89aeca850969e2655d845faaadb470b37a1207b027e3/re_mocd-0.1.5-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "61c1ba46817284d53ba672cb64547692837147e6096235543ac6086ca2092ce5",
"md5": "870aa10be45fb265aafc7fee02df00fb",
"sha256": "326c7bb42befab9fe29a28ce828f4b238278ddc0d03a74664c9dd79b12dda9af"
},
"downloads": -1,
"filename": "re_mocd-0.1.5.tar.gz",
"has_sig": false,
"md5_digest": "870aa10be45fb265aafc7fee02df00fb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 254459,
"upload_time": "2025-01-07T21:51:18",
"upload_time_iso_8601": "2025-01-07T21:51:18.891335Z",
"url": "https://files.pythonhosted.org/packages/61/c1/ba46817284d53ba672cb64547692837147e6096235543ac6086ca2092ce5/re_mocd-0.1.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-07 21:51:18",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "0l1ve1r4",
"github_project": "re_mocd",
"github_not_found": true,
"lcname": "re-mocd"
}