mimodium 0.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. mimodium-0.0.1/.github/workflows/ci.yml +120 -0
  2. mimodium-0.0.1/.github/workflows/python-publish.yml +101 -0
  3. mimodium-0.0.1/.gitignore +15 -0
  4. mimodium-0.0.1/.readthedocs.yaml +17 -0
  5. mimodium-0.0.1/AGENTS.md +11 -0
  6. mimodium-0.0.1/CITATION.cff +24 -0
  7. mimodium-0.0.1/LICENSE +674 -0
  8. mimodium-0.0.1/PKG-INFO +131 -0
  9. mimodium-0.0.1/README.md +85 -0
  10. mimodium-0.0.1/docs/_ext/mimodium_semantic_types.py +588 -0
  11. mimodium-0.0.1/docs/_static/brand/GO-FONT-LICENSE.txt +36 -0
  12. mimodium-0.0.1/docs/_static/brand/README.md +78 -0
  13. mimodium-0.0.1/docs/_static/brand/exports/.gitignore +2 -0
  14. mimodium-0.0.1/docs/_static/brand/font/Go-Medium.ttf +0 -0
  15. mimodium-0.0.1/docs/_static/brand/generate_assets.py +405 -0
  16. mimodium-0.0.1/docs/_static/brand/mimodium-logo-dark.svg +37 -0
  17. mimodium-0.0.1/docs/_static/brand/mimodium-logo-editable.svg +28 -0
  18. mimodium-0.0.1/docs/_static/brand/mimodium-logo.svg +37 -0
  19. mimodium-0.0.1/docs/_static/brand/mimodium-mark-dark.png +0 -0
  20. mimodium-0.0.1/docs/_static/brand/mimodium-mark.svg +27 -0
  21. mimodium-0.0.1/docs/_static/mimodium.css +164 -0
  22. mimodium-0.0.1/docs/api/algorithms/access.rst +4 -0
  23. mimodium-0.0.1/docs/api/algorithms/channel_estimation.rst +4 -0
  24. mimodium-0.0.1/docs/api/algorithms/downlink_precoding.rst +4 -0
  25. mimodium-0.0.1/docs/api/algorithms/index.rst +16 -0
  26. mimodium-0.0.1/docs/api/algorithms/power_control.rst +4 -0
  27. mimodium-0.0.1/docs/api/algorithms/uplink_combining.rst +4 -0
  28. mimodium-0.0.1/docs/api/algorithms/uplink_fusion.rst +4 -0
  29. mimodium-0.0.1/docs/api/core_tasks.rst +6 -0
  30. mimodium-0.0.1/docs/api/evaluation/asymptotics.rst +4 -0
  31. mimodium-0.0.1/docs/api/evaluation/index.rst +13 -0
  32. mimodium-0.0.1/docs/api/evaluation/set_sizes.rst +4 -0
  33. mimodium-0.0.1/docs/api/evaluation/spectral_efficiency.rst +4 -0
  34. mimodium-0.0.1/docs/api/index.rst +13 -0
  35. mimodium-0.0.1/docs/api/propagation/channel_generation.rst +4 -0
  36. mimodium-0.0.1/docs/api/propagation/index.rst +14 -0
  37. mimodium-0.0.1/docs/api/propagation/path_loss.rst +4 -0
  38. mimodium-0.0.1/docs/api/propagation/radio_parameters.rst +4 -0
  39. mimodium-0.0.1/docs/api/propagation/shadow_fading.rst +4 -0
  40. mimodium-0.0.1/docs/api/rng.rst +7 -0
  41. mimodium-0.0.1/docs/api/scenario/ap.rst +4 -0
  42. mimodium-0.0.1/docs/api/scenario/area.rst +4 -0
  43. mimodium-0.0.1/docs/api/scenario/cpu.rst +4 -0
  44. mimodium-0.0.1/docs/api/scenario/fronthaul.rst +4 -0
  45. mimodium-0.0.1/docs/api/scenario/geometry.rst +4 -0
  46. mimodium-0.0.1/docs/api/scenario/index.rst +18 -0
  47. mimodium-0.0.1/docs/api/scenario/midhaul.rst +4 -0
  48. mimodium-0.0.1/docs/api/scenario/power.rst +4 -0
  49. mimodium-0.0.1/docs/api/scenario/ue.rst +4 -0
  50. mimodium-0.0.1/docs/api/visualization/index.rst +12 -0
  51. mimodium-0.0.1/docs/api/visualization/plot_top_view.rst +29 -0
  52. mimodium-0.0.1/docs/api/visualization/use_default_style.rst +6 -0
  53. mimodium-0.0.1/docs/conf.py +79 -0
  54. mimodium-0.0.1/docs/getting_started/index.rst +36 -0
  55. mimodium-0.0.1/docs/index.rst +65 -0
  56. mimodium-0.0.1/docs/researcher_guide/index.rst +20 -0
  57. mimodium-0.0.1/docs/semantic_types.rst +15 -0
  58. mimodium-0.0.1/docs/sg_execution_times.rst +37 -0
  59. mimodium-0.0.1/docs/tutorial_sources/hello_world/README.rst +4 -0
  60. mimodium-0.0.1/docs/tutorial_sources/hello_world/plot_hello_world.py +71 -0
  61. mimodium-0.0.1/docs/tutorials/index.rst +20 -0
  62. mimodium-0.0.1/pyproject.toml +92 -0
  63. mimodium-0.0.1/src/mimodium/__init__.py +74 -0
  64. mimodium-0.0.1/src/mimodium/algorithms/__init__.py +93 -0
  65. mimodium-0.0.1/src/mimodium/algorithms/access.py +603 -0
  66. mimodium-0.0.1/src/mimodium/algorithms/channel_estimation.py +324 -0
  67. mimodium-0.0.1/src/mimodium/algorithms/downlink_precoding.py +255 -0
  68. mimodium-0.0.1/src/mimodium/algorithms/power_control.py +382 -0
  69. mimodium-0.0.1/src/mimodium/algorithms/uplink_combining.py +513 -0
  70. mimodium-0.0.1/src/mimodium/algorithms/uplink_fusion.py +808 -0
  71. mimodium-0.0.1/src/mimodium/array_ops.py +40 -0
  72. mimodium-0.0.1/src/mimodium/evaluation/__init__.py +47 -0
  73. mimodium-0.0.1/src/mimodium/evaluation/asymptotics.py +279 -0
  74. mimodium-0.0.1/src/mimodium/evaluation/set_sizes.py +205 -0
  75. mimodium-0.0.1/src/mimodium/evaluation/spectral_efficiency.py +477 -0
  76. mimodium-0.0.1/src/mimodium/propagation/__init__.py +47 -0
  77. mimodium-0.0.1/src/mimodium/propagation/channel_generation.py +213 -0
  78. mimodium-0.0.1/src/mimodium/propagation/path_loss.py +909 -0
  79. mimodium-0.0.1/src/mimodium/propagation/radio_parameters.py +179 -0
  80. mimodium-0.0.1/src/mimodium/propagation/shadow_fading.py +382 -0
  81. mimodium-0.0.1/src/mimodium/rng.py +59 -0
  82. mimodium-0.0.1/src/mimodium/scenario/__init__.py +72 -0
  83. mimodium-0.0.1/src/mimodium/scenario/ap.py +241 -0
  84. mimodium-0.0.1/src/mimodium/scenario/area.py +45 -0
  85. mimodium-0.0.1/src/mimodium/scenario/cpu.py +146 -0
  86. mimodium-0.0.1/src/mimodium/scenario/fronthaul.py +38 -0
  87. mimodium-0.0.1/src/mimodium/scenario/geometry.py +249 -0
  88. mimodium-0.0.1/src/mimodium/scenario/midhaul.py +96 -0
  89. mimodium-0.0.1/src/mimodium/scenario/power.py +73 -0
  90. mimodium-0.0.1/src/mimodium/scenario/ue.py +144 -0
  91. mimodium-0.0.1/src/mimodium/visualization/__init__.py +46 -0
  92. mimodium-0.0.1/src/mimodium/visualization/_marker.py +1899 -0
  93. mimodium-0.0.1/src/mimodium/visualization/_top_view.py +569 -0
  94. mimodium-0.0.1/src/mimodium/visualization/mimodium.mplstyle +26 -0
  95. mimodium-0.0.1/src/mimodium/visualization/svgs/ap.svg +6 -0
  96. mimodium-0.0.1/src/mimodium/visualization/svgs/ap_thin.svg +82 -0
  97. mimodium-0.0.1/src/mimodium/visualization/svgs/cpu.svg +6 -0
  98. mimodium-0.0.1/src/mimodium/visualization/svgs/ue.svg +1 -0
  99. mimodium-0.0.1/src/mimodium/warnings.py +6 -0
  100. mimodium-0.0.1/tests/algorithms/test_access.py +381 -0
  101. mimodium-0.0.1/tests/algorithms/test_channel_estimation.py +266 -0
  102. mimodium-0.0.1/tests/algorithms/test_downlink_precoding.py +191 -0
  103. mimodium-0.0.1/tests/algorithms/test_power_control.py +337 -0
  104. mimodium-0.0.1/tests/algorithms/test_uplink_combining.py +134 -0
  105. mimodium-0.0.1/tests/algorithms/test_uplink_fusion.py +622 -0
  106. mimodium-0.0.1/tests/evaluation/test_asymptotics.py +188 -0
  107. mimodium-0.0.1/tests/evaluation/test_set_sizes.py +89 -0
  108. mimodium-0.0.1/tests/evaluation/test_spectral_efficiency.py +258 -0
  109. mimodium-0.0.1/tests/propagation/test_channel_generation.py +187 -0
  110. mimodium-0.0.1/tests/propagation/test_path_loss.py +417 -0
  111. mimodium-0.0.1/tests/propagation/test_radio_parameters.py +79 -0
  112. mimodium-0.0.1/tests/propagation/test_shadow_fading.py +399 -0
  113. mimodium-0.0.1/tests/scenario/test_ap.py +149 -0
  114. mimodium-0.0.1/tests/scenario/test_area.py +13 -0
  115. mimodium-0.0.1/tests/scenario/test_cpu.py +108 -0
  116. mimodium-0.0.1/tests/scenario/test_fronthaul.py +61 -0
  117. mimodium-0.0.1/tests/scenario/test_geometry.py +167 -0
  118. mimodium-0.0.1/tests/scenario/test_integration.py +156 -0
  119. mimodium-0.0.1/tests/scenario/test_midhaul.py +133 -0
  120. mimodium-0.0.1/tests/scenario/test_power.py +29 -0
  121. mimodium-0.0.1/tests/scenario/test_ue.py +96 -0
  122. mimodium-0.0.1/tests/scenario/test_validation.py +81 -0
  123. mimodium-0.0.1/tests/test_array_ops.py +53 -0
  124. mimodium-0.0.1/tests/test_rng.py +94 -0
  125. mimodium-0.0.1/tests/test_version.py +7 -0
  126. mimodium-0.0.1/tests/test_warnings.py +14 -0
@@ -0,0 +1,120 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ env:
12
+ MPLBACKEND: Agg
13
+
14
+ jobs:
15
+ quality:
16
+ name: Code quality
17
+ runs-on: ubuntu-latest
18
+ timeout-minutes: 15
19
+
20
+ steps:
21
+ - name: Check out repository
22
+ uses: actions/checkout@v6
23
+
24
+ - name: Set up Python
25
+ uses: actions/setup-python@v6
26
+ with:
27
+ python-version: "3.12"
28
+ cache: pip
29
+
30
+ - name: Install package and development dependencies
31
+ run: python -m pip install -e ".[dev]"
32
+
33
+ - name: Check formatting
34
+ run: ruff format --check src tests docs
35
+
36
+ - name: Lint
37
+ run: ruff check src tests docs
38
+
39
+ tests:
40
+ name: Tests (Python ${{ matrix.python-version }})
41
+ runs-on: ubuntu-latest
42
+ timeout-minutes: 15
43
+ strategy:
44
+ fail-fast: false
45
+ matrix:
46
+ python-version: ["3.12", "3.13", "3.14"]
47
+
48
+ steps:
49
+ - name: Check out repository
50
+ uses: actions/checkout@v6
51
+
52
+ - name: Set up Python
53
+ uses: actions/setup-python@v6
54
+ with:
55
+ python-version: ${{ matrix.python-version }}
56
+ cache: pip
57
+
58
+ - name: Install package and test dependencies
59
+ run: python -m pip install -e ".[test]"
60
+
61
+ - name: Run tests
62
+ run: pytest
63
+
64
+ documentation:
65
+ name: Documentation
66
+ runs-on: ubuntu-latest
67
+ timeout-minutes: 15
68
+
69
+ steps:
70
+ - name: Check out repository
71
+ uses: actions/checkout@v6
72
+
73
+ - name: Set up Python
74
+ uses: actions/setup-python@v6
75
+ with:
76
+ python-version: "3.12"
77
+ cache: pip
78
+
79
+ - name: Install package and documentation dependencies
80
+ run: python -m pip install -e ".[docs]"
81
+
82
+ - name: Build documentation strictly
83
+ run: sphinx-build -E -W --keep-going -b html docs docs/_build/html
84
+
85
+ distribution:
86
+ name: Distribution
87
+ runs-on: ubuntu-latest
88
+ timeout-minutes: 15
89
+
90
+ steps:
91
+ - name: Check out repository
92
+ uses: actions/checkout@v6
93
+
94
+ - name: Set up Python
95
+ uses: actions/setup-python@v6
96
+ with:
97
+ python-version: "3.12"
98
+ cache: pip
99
+
100
+ - name: Install build tools
101
+ run: python -m pip install build twine
102
+
103
+ - name: Build wheel and source distribution
104
+ run: python -m build
105
+
106
+ - name: Check distribution metadata
107
+ run: python -m twine check dist/*
108
+
109
+ - name: Smoke-test built wheel
110
+ run: |
111
+ python -m venv wheel-test-env
112
+ wheel-test-env/bin/python -m pip install dist/*.whl
113
+ wheel-test-env/bin/python -I -c "import mimodium; assert len(mimodium.core_tasks()) > 0"
114
+
115
+ - name: Upload distributions
116
+ uses: actions/upload-artifact@v7
117
+ with:
118
+ name: distributions
119
+ path: dist/
120
+ if-no-files-found: error
@@ -0,0 +1,101 @@
1
+ # Upload Mimodium to PyPI when a GitHub release is published.
2
+
3
+ name: Upload Python Package
4
+
5
+ on:
6
+ release:
7
+ types: [published]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ release-build:
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - uses: actions/checkout@v6
18
+
19
+ - uses: actions/setup-python@v6
20
+ with:
21
+ python-version: "3.12"
22
+
23
+ - name: Install release dependencies
24
+ run: |
25
+ python -m pip install --upgrade pip
26
+ python -m pip install -e ".[dev]"
27
+
28
+ - name: Verify release version
29
+ env:
30
+ RELEASE_TAG: ${{ github.event.release.tag_name }}
31
+ run: |
32
+ python - <<'PY'
33
+ import os
34
+ from pathlib import Path
35
+ import tomllib
36
+
37
+ project = tomllib.loads(Path("pyproject.toml").read_text())
38
+ package_version = project["project"]["version"]
39
+ citation_version = next(
40
+ line.split(":", 1)[1].strip().strip("'\"")
41
+ for line in Path("CITATION.cff").read_text().splitlines()
42
+ if line.startswith("version:")
43
+ )
44
+ expected_tag = f"v{package_version}"
45
+ release_tag = os.environ["RELEASE_TAG"]
46
+
47
+ if release_tag != expected_tag or citation_version != package_version:
48
+ raise SystemExit(
49
+ "Release version mismatch: "
50
+ f"tag={release_tag!r}, package={package_version!r}, "
51
+ f"citation={citation_version!r}"
52
+ )
53
+ PY
54
+
55
+ - name: Check formatting
56
+ run: ruff format --check src tests docs
57
+
58
+ - name: Lint
59
+ run: ruff check src tests docs
60
+
61
+ - name: Test
62
+ run: pytest
63
+
64
+ - name: Build docs
65
+ run: sphinx-build -E -W --keep-going -b html docs docs/_build/html
66
+
67
+ - name: Build release distributions
68
+ run: python -m build
69
+
70
+ - name: Check release distributions
71
+ run: python -m twine check dist/*
72
+
73
+ - name: Upload distributions
74
+ uses: actions/upload-artifact@v7
75
+ with:
76
+ name: release-dists
77
+ path: dist/
78
+
79
+ pypi-publish:
80
+ runs-on: ubuntu-latest
81
+ needs:
82
+ - release-build
83
+ permissions:
84
+ contents: read
85
+ id-token: write
86
+
87
+ environment:
88
+ name: pypi
89
+ url: https://pypi.org/project/mimodium/
90
+
91
+ steps:
92
+ - name: Retrieve release distributions
93
+ uses: actions/download-artifact@v8
94
+ with:
95
+ name: release-dists
96
+ path: dist/
97
+
98
+ - name: Publish release distributions to PyPI
99
+ uses: pypa/gh-action-pypi-publish@release/v1
100
+ with:
101
+ packages-dir: dist/
@@ -0,0 +1,15 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+
4
+ .pytest_cache/
5
+ .ruff_cache/
6
+ .venv/
7
+
8
+ dist/
9
+
10
+ docs/_build/
11
+ docs/tutorials/hello_world/
12
+
13
+ .vscode/
14
+
15
+ design/
@@ -0,0 +1,17 @@
1
+ version: 2
2
+
3
+ build:
4
+ os: ubuntu-24.04
5
+ tools:
6
+ python: "3.12"
7
+
8
+ sphinx:
9
+ configuration: docs/conf.py
10
+ fail_on_warning: true
11
+
12
+ python:
13
+ install:
14
+ - method: pip
15
+ path: .
16
+ extra_requirements:
17
+ - docs
@@ -0,0 +1,11 @@
1
+ # Documentation guidance
2
+
3
+ - Keep type docstrings as short as possible while remaining expressive.
4
+ - Give task docstrings enough detail to explain not only what the task does and
5
+ how to use it, but also why it exists. Include examples for complicated
6
+ algorithms when useful.
7
+ - Use `:type:` links frequently in type documentation. They are generally
8
+ unnecessary in task documentation because the task's `__call__` method
9
+ already provides those links.
10
+ - When a task accepts configurable input types, always explain how to use them
11
+ with `:code:` markup.
@@ -0,0 +1,24 @@
1
+ cff-version: 1.2.0
2
+ message: >-
3
+ If you use Mimodium in a research publication, please cite the software
4
+ version and exact commit. This citation metadata will be updated to prefer
5
+ the companion paper before the public 0.1 release.
6
+ title: "Mimodium: Cell-Free Massive MIMO Simulation Library"
7
+ authors:
8
+ - family-names: Schulz
9
+ given-names: Leonard
10
+ email: leonard.schulz@tuhh.de
11
+ version: 0.0.1
12
+ license: GPL-3.0-or-later
13
+ repository-code: "https://github.com/LPSchulz/mimodium"
14
+ url: "https://mimodium.readthedocs.io/"
15
+ abstract: >-
16
+ Mimodium is a Python research library for reproducible cell-free massive MIMO
17
+ system-level simulations. It provides Dagreon task components for scenario
18
+ generation, propagation and channel modeling, signal-processing algorithms,
19
+ evaluation metrics, and visualization.
20
+ keywords:
21
+ - cell-free massive MIMO
22
+ - wireless communications
23
+ - system-level simulation
24
+ - reproducibility