phased-array-systems 0.2.0__tar.gz → 0.4.0__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.
- phased_array_systems-0.4.0/.github/workflows/docs.yml +45 -0
- phased_array_systems-0.4.0/CHANGELOG.md +77 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/CLAUDE.md +39 -16
- phased_array_systems-0.4.0/CONTRIBUTING.md +210 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/PKG-INFO +79 -2
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/README.md +68 -0
- phased_array_systems-0.4.0/docs/api/architecture.md +102 -0
- phased_array_systems-0.4.0/docs/api/index.md +112 -0
- phased_array_systems-0.4.0/docs/api/io.md +250 -0
- phased_array_systems-0.4.0/docs/api/models/antenna.md +103 -0
- phased_array_systems-0.4.0/docs/api/models/comms.md +142 -0
- phased_array_systems-0.4.0/docs/api/models/index.md +103 -0
- phased_array_systems-0.4.0/docs/api/models/radar.md +161 -0
- phased_array_systems-0.4.0/docs/api/models/swapc.md +157 -0
- phased_array_systems-0.4.0/docs/api/reports.md +163 -0
- phased_array_systems-0.4.0/docs/api/requirements.md +128 -0
- phased_array_systems-0.4.0/docs/api/scenarios.md +92 -0
- phased_array_systems-0.4.0/docs/api/trades.md +179 -0
- phased_array_systems-0.4.0/docs/api/viz.md +179 -0
- phased_array_systems-0.4.0/docs/changelog.md +29 -0
- phased_array_systems-0.4.0/docs/cli/doe.md +213 -0
- phased_array_systems-0.4.0/docs/cli/index.md +143 -0
- phased_array_systems-0.4.0/docs/cli/pareto.md +178 -0
- phased_array_systems-0.4.0/docs/cli/report.md +215 -0
- phased_array_systems-0.4.0/docs/cli/run.md +182 -0
- phased_array_systems-0.4.0/docs/contributing.md +42 -0
- phased_array_systems-0.4.0/docs/faq.md +251 -0
- phased_array_systems-0.4.0/docs/getting-started/concepts.md +421 -0
- phased_array_systems-0.4.0/docs/getting-started/index.md +55 -0
- phased_array_systems-0.4.0/docs/getting-started/installation.md +232 -0
- phased_array_systems-0.4.0/docs/getting-started/quickstart.md +299 -0
- phased_array_systems-0.4.0/docs/index.md +166 -0
- phased_array_systems-0.4.0/docs/javascripts/mathjax.js +23 -0
- phased_array_systems-0.4.0/docs/stylesheets/extra.css +131 -0
- phased_array_systems-0.4.0/docs/theory/index.md +68 -0
- phased_array_systems-0.4.0/docs/theory/link-budget-equations.md +247 -0
- phased_array_systems-0.4.0/docs/theory/pareto-optimization.md +269 -0
- phased_array_systems-0.4.0/docs/theory/phased-arrays.md +255 -0
- phased_array_systems-0.4.0/docs/theory/radar-equation.md +237 -0
- phased_array_systems-0.4.0/docs/tutorials/comms-trade-study.md +319 -0
- phased_array_systems-0.4.0/docs/tutorials/config-driven-workflow.md +393 -0
- phased_array_systems-0.4.0/docs/tutorials/index.md +67 -0
- phased_array_systems-0.4.0/docs/tutorials/radar-detection-trade.md +371 -0
- phased_array_systems-0.4.0/docs/tutorials/sensitivity-analysis.md +365 -0
- phased_array_systems-0.4.0/docs/user-guide/architecture.md +333 -0
- phased_array_systems-0.4.0/docs/user-guide/index.md +132 -0
- phased_array_systems-0.4.0/docs/user-guide/link-budget.md +343 -0
- phased_array_systems-0.4.0/docs/user-guide/pareto-analysis.md +385 -0
- phased_array_systems-0.4.0/docs/user-guide/radar-detection.md +348 -0
- phased_array_systems-0.4.0/docs/user-guide/reports.md +386 -0
- phased_array_systems-0.4.0/docs/user-guide/requirements.md +340 -0
- phased_array_systems-0.4.0/docs/user-guide/scenarios.md +268 -0
- phased_array_systems-0.4.0/docs/user-guide/trade-studies.md +409 -0
- phased_array_systems-0.4.0/docs/user-guide/visualization.md +470 -0
- phased_array_systems-0.4.0/examples/03_radar_detection_trade.py +377 -0
- phased_array_systems-0.4.0/mkdocs.yml +167 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/notebooks/tutorial_phased_array_trade_study.ipynb +2 -38
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/pyproject.toml +11 -1
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/__about__.py +1 -1
- phased_array_systems-0.4.0/src/phased_array_systems/cli.py +376 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/constants.py +1 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/evaluate.py +4 -2
- phased_array_systems-0.4.0/src/phased_array_systems/models/__init__.py +85 -0
- phased_array_systems-0.4.0/src/phased_array_systems/models/digital/__init__.py +58 -0
- phased_array_systems-0.4.0/src/phased_array_systems/models/digital/bandwidth.py +261 -0
- phased_array_systems-0.4.0/src/phased_array_systems/models/digital/converters.py +273 -0
- phased_array_systems-0.4.0/src/phased_array_systems/models/digital/scheduling.py +341 -0
- phased_array_systems-0.4.0/src/phased_array_systems/models/radar/__init__.py +25 -0
- phased_array_systems-0.4.0/src/phased_array_systems/models/radar/detection.py +259 -0
- phased_array_systems-0.4.0/src/phased_array_systems/models/radar/equation.py +253 -0
- phased_array_systems-0.4.0/src/phased_array_systems/models/radar/integration.py +140 -0
- phased_array_systems-0.4.0/src/phased_array_systems/models/rf/__init__.py +37 -0
- phased_array_systems-0.4.0/src/phased_array_systems/models/rf/cascade.py +538 -0
- phased_array_systems-0.4.0/src/phased_array_systems/reports/__init__.py +11 -0
- phased_array_systems-0.4.0/src/phased_array_systems/reports/generator.py +167 -0
- phased_array_systems-0.4.0/src/phased_array_systems/reports/html.py +452 -0
- phased_array_systems-0.4.0/src/phased_array_systems/reports/markdown.py +256 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/scenarios/radar.py +22 -3
- phased_array_systems-0.4.0/tests/test_cli.py +210 -0
- phased_array_systems-0.4.0/tests/test_radar.py +365 -0
- phased_array_systems-0.4.0/tests/test_reports.py +283 -0
- phased_array_systems-0.2.0/src/phased_array_systems/cli.py +0 -25
- phased_array_systems-0.2.0/src/phased_array_systems/models/__init__.py +0 -5
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/.github/workflows/ci.yml +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/.github/workflows/publish.yml +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/.gitignore +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/LICENSE +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/examples/01_comms_single_case.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/examples/02_comms_doe_trade.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/examples/configs/comms_basic.yaml +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/examples/configs/comms_doe.yaml +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/ruff.toml +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/__init__.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/architecture/__init__.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/architecture/config.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/io/__init__.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/io/config_loader.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/io/exporters.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/io/schema.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/models/antenna/__init__.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/models/antenna/adapter.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/models/antenna/metrics.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/models/base.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/models/comms/__init__.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/models/comms/link_budget.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/models/comms/propagation.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/models/swapc/__init__.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/models/swapc/cost.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/models/swapc/power.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/requirements/__init__.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/requirements/core.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/scenarios/__init__.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/scenarios/base.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/scenarios/comms.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/trades/__init__.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/trades/design_space.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/trades/doe.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/trades/pareto.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/trades/runner.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/types.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/utils/__init__.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/utils/hashing.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/viz/__init__.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/src/phased_array_systems/viz/plots.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/tests/__init__.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/tests/test_antenna_adapter.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/tests/test_architecture.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/tests/test_comms_link_budget.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/tests/test_doe.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/tests/test_evaluate.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/tests/test_pareto.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/tests/test_requirements.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/tests/test_runner.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/tests/test_swapc.py +0 -0
- {phased_array_systems-0.2.0 → phased_array_systems-0.4.0}/tests/test_viz.py +0 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
name: Deploy Documentation
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
release:
|
|
7
|
+
types: [published]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: write
|
|
12
|
+
pages: write
|
|
13
|
+
id-token: write
|
|
14
|
+
|
|
15
|
+
concurrency:
|
|
16
|
+
group: deploy-docs
|
|
17
|
+
cancel-in-progress: true
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
deploy:
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
steps:
|
|
23
|
+
- name: Checkout repository
|
|
24
|
+
uses: actions/checkout@v4
|
|
25
|
+
with:
|
|
26
|
+
fetch-depth: 0
|
|
27
|
+
|
|
28
|
+
- name: Set up Python
|
|
29
|
+
uses: actions/setup-python@v5
|
|
30
|
+
with:
|
|
31
|
+
python-version: '3.11'
|
|
32
|
+
cache: 'pip'
|
|
33
|
+
|
|
34
|
+
- name: Install dependencies
|
|
35
|
+
run: |
|
|
36
|
+
python -m pip install --upgrade pip
|
|
37
|
+
pip install -e ".[docs]"
|
|
38
|
+
|
|
39
|
+
- name: Configure Git
|
|
40
|
+
run: |
|
|
41
|
+
git config --global user.name "github-actions[bot]"
|
|
42
|
+
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
|
43
|
+
|
|
44
|
+
- name: Deploy to GitHub Pages
|
|
45
|
+
run: mkdocs gh-deploy --force
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to phased-array-systems will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Comprehensive documentation site with MkDocs Material
|
|
12
|
+
- API reference with mkdocstrings
|
|
13
|
+
- User guides for all major features
|
|
14
|
+
- Tutorials for communications and radar trade studies
|
|
15
|
+
- Theory documentation for phased arrays and link budgets
|
|
16
|
+
|
|
17
|
+
## [0.3.0] - 2024-01-15
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
- Radar detection model with pulse integration
|
|
21
|
+
- `RadarDetectionScenario` for radar trade studies
|
|
22
|
+
- Radar equation calculator with Swerling models
|
|
23
|
+
- Detection probability and false alarm rate computations
|
|
24
|
+
- CLI commands: `pasys run`, `pasys doe`, `pasys report`, `pasys pareto`
|
|
25
|
+
- HTML and Markdown report generation
|
|
26
|
+
- Example: `03_radar_detection_trade.py`
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
- Improved Pareto extraction algorithm efficiency
|
|
30
|
+
- Enhanced visualization with 3D trade space plots
|
|
31
|
+
|
|
32
|
+
### Fixed
|
|
33
|
+
- Hypervolume calculation for 3+ objectives
|
|
34
|
+
|
|
35
|
+
## [0.2.0] - 2024-01-01
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
- Design of Experiments (DOE) generation with LHS, random, and grid methods
|
|
39
|
+
- `BatchRunner` for parallel evaluation with progress tracking
|
|
40
|
+
- Pareto frontier extraction and ranking (weighted sum, TOPSIS)
|
|
41
|
+
- Scatter matrix visualization
|
|
42
|
+
- Parquet and CSV export functionality
|
|
43
|
+
- Requirements verification with pass/fail and margins
|
|
44
|
+
- `DesignSpace` for defining variable bounds and types
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
- Refactored architecture configuration to use Pydantic v2
|
|
48
|
+
- Improved error handling for batch evaluation
|
|
49
|
+
|
|
50
|
+
### Fixed
|
|
51
|
+
- Array gain calculation for non-square arrays
|
|
52
|
+
- Case ID generation collision in augmented DOE
|
|
53
|
+
|
|
54
|
+
## [0.1.0] - 2023-12-15
|
|
55
|
+
|
|
56
|
+
### Added
|
|
57
|
+
- Initial release
|
|
58
|
+
- `Architecture` configuration: `ArrayConfig`, `RFChainConfig`, `CostConfig`
|
|
59
|
+
- `CommsLinkScenario` for communications link analysis
|
|
60
|
+
- Communications link budget model (`CommsLinkModel`)
|
|
61
|
+
- Free space path loss propagation model
|
|
62
|
+
- Power and cost models for SWaP-C analysis
|
|
63
|
+
- `Requirement` and `RequirementSet` for requirements management
|
|
64
|
+
- Pareto plot visualization
|
|
65
|
+
- YAML/JSON configuration loading
|
|
66
|
+
- Example: `01_comms_single_case.py`
|
|
67
|
+
- Example: `02_comms_doe_trade.py`
|
|
68
|
+
- Tutorial Jupyter notebook
|
|
69
|
+
|
|
70
|
+
### Dependencies
|
|
71
|
+
- Requires `phased-array-modeling>=1.2.0`
|
|
72
|
+
- Python 3.10+
|
|
73
|
+
|
|
74
|
+
[Unreleased]: https://github.com/jman4162/phased-array-systems/compare/v0.3.0...HEAD
|
|
75
|
+
[0.3.0]: https://github.com/jman4162/phased-array-systems/compare/v0.2.0...v0.3.0
|
|
76
|
+
[0.2.0]: https://github.com/jman4162/phased-array-systems/compare/v0.1.0...v0.2.0
|
|
77
|
+
[0.1.0]: https://github.com/jman4162/phased-array-systems/releases/tag/v0.1.0
|
|
@@ -8,30 +8,31 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
|
|
8
8
|
|
|
9
9
|
**Core dependency:** `phased-array-modeling>=1.2.0` (provides array geometries, steering, tapering, impairments, and pattern visualization)
|
|
10
10
|
|
|
11
|
-
**Project status:**
|
|
11
|
+
**Project status:** v0.4.0 - All 4 implementation phases complete. See `package_design_and_requirements.txt` for the original SDD.
|
|
12
12
|
|
|
13
13
|
## Build & Development Commands
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
# Installation
|
|
17
|
-
pip install
|
|
18
|
-
pip install
|
|
19
|
-
pip install
|
|
16
|
+
# Installation
|
|
17
|
+
pip install -e . # Editable install
|
|
18
|
+
pip install -e ".[dev]" # Development deps (pytest, ruff, mypy)
|
|
19
|
+
pip install -e ".[plotting]" # Visualization (plotly, kaleido)
|
|
20
20
|
|
|
21
21
|
# Testing
|
|
22
|
-
pytest tests/
|
|
23
|
-
pytest tests/test_comms_link_budget.py -v
|
|
24
|
-
pytest tests/ --cov=phased_array_systems
|
|
22
|
+
pytest tests/ # Run all tests
|
|
23
|
+
pytest tests/test_comms_link_budget.py -v # Run specific test file
|
|
24
|
+
pytest tests/ --cov=phased_array_systems # With coverage
|
|
25
25
|
|
|
26
26
|
# Linting & Formatting
|
|
27
27
|
ruff check .
|
|
28
28
|
ruff format .
|
|
29
29
|
mypy src/phased_array_systems
|
|
30
30
|
|
|
31
|
-
# CLI
|
|
32
|
-
pasys run config.yaml
|
|
33
|
-
pasys doe config.yaml
|
|
34
|
-
pasys pareto results.parquet --x cost_usd --y eirp_dbw
|
|
31
|
+
# CLI
|
|
32
|
+
pasys run config.yaml # Single case evaluation
|
|
33
|
+
pasys doe config.yaml # DOE batch study
|
|
34
|
+
pasys pareto results.parquet --x cost_usd --y eirp_dbw # Pareto analysis
|
|
35
|
+
pasys report results.parquet -o report.html # Generate HTML report
|
|
35
36
|
```
|
|
36
37
|
|
|
37
38
|
## Architecture
|
|
@@ -88,10 +89,32 @@ Config (YAML/JSON) → Pydantic validation → [Architecture + Scenario + Requir
|
|
|
88
89
|
|
|
89
90
|
## Implementation Phases
|
|
90
91
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
All phases are complete as of v0.4.0:
|
|
93
|
+
|
|
94
|
+
1. **Phase 1 (MVP):** ✅ Complete
|
|
95
|
+
- Pydantic schemas for Architecture, Scenario, RequirementSet
|
|
96
|
+
- YAML/JSON config loader with validation
|
|
97
|
+
- Requirements verification with pass/fail and margin reporting
|
|
98
|
+
- Antenna adapter wrapping `phased-array-modeling`
|
|
99
|
+
- Comms link budget model (EIRP, path loss, SNR, margins)
|
|
100
|
+
|
|
101
|
+
2. **Phase 2:** ✅ Complete
|
|
102
|
+
- DOE generator with full-factorial and Latin hypercube sampling
|
|
103
|
+
- Batch runner with parallel execution and resume capability
|
|
104
|
+
- Pareto extraction for multi-objective optimization
|
|
105
|
+
- Interactive plots (Pareto fronts, scatter matrices)
|
|
106
|
+
- Parquet/CSV export for results
|
|
107
|
+
|
|
108
|
+
3. **Phase 3:** ✅ Complete
|
|
109
|
+
- Radar equation model (SNR, detection range)
|
|
110
|
+
- Detection threshold helpers (PD/PFA calculations)
|
|
111
|
+
- Integration gain for pulse integration
|
|
112
|
+
- Radar trade study examples
|
|
113
|
+
|
|
114
|
+
4. **Phase 4:** ✅ Complete
|
|
115
|
+
- `pasys` CLI with run, doe, pareto, and report commands
|
|
116
|
+
- HTML and Markdown report generation
|
|
117
|
+
- Ready for PyPI publish
|
|
95
118
|
|
|
96
119
|
## Future Goals
|
|
97
120
|
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# Contributing to phased-array-systems
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing to phased-array-systems! This document provides guidelines and instructions for contributing.
|
|
4
|
+
|
|
5
|
+
## Code of Conduct
|
|
6
|
+
|
|
7
|
+
Please be respectful and constructive in all interactions. We welcome contributors of all experience levels.
|
|
8
|
+
|
|
9
|
+
## Getting Started
|
|
10
|
+
|
|
11
|
+
### Development Setup
|
|
12
|
+
|
|
13
|
+
1. **Fork and clone the repository:**
|
|
14
|
+
```bash
|
|
15
|
+
git clone https://github.com/YOUR_USERNAME/phased-array-systems.git
|
|
16
|
+
cd phased-array-systems
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
2. **Create a virtual environment:**
|
|
20
|
+
```bash
|
|
21
|
+
python -m venv venv
|
|
22
|
+
source venv/bin/activate # On Windows: venv\Scripts\activate
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
3. **Install in development mode:**
|
|
26
|
+
```bash
|
|
27
|
+
pip install -e ".[dev,docs,plotting]"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
4. **Verify the installation:**
|
|
31
|
+
```bash
|
|
32
|
+
pytest tests/ -v
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Running Tests
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Run all tests
|
|
39
|
+
pytest tests/
|
|
40
|
+
|
|
41
|
+
# Run with coverage
|
|
42
|
+
pytest tests/ --cov=phased_array_systems
|
|
43
|
+
|
|
44
|
+
# Run a specific test file
|
|
45
|
+
pytest tests/test_link_budget.py -v
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Code Quality
|
|
49
|
+
|
|
50
|
+
We use `ruff` for linting and formatting, and `mypy` for type checking:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# Lint the codebase
|
|
54
|
+
ruff check .
|
|
55
|
+
|
|
56
|
+
# Auto-format code
|
|
57
|
+
ruff format .
|
|
58
|
+
|
|
59
|
+
# Type check
|
|
60
|
+
mypy src/phased_array_systems
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Making Changes
|
|
64
|
+
|
|
65
|
+
### Branching Strategy
|
|
66
|
+
|
|
67
|
+
1. Create a feature branch from `main`:
|
|
68
|
+
```bash
|
|
69
|
+
git checkout -b feature/your-feature-name
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
2. Make your changes with clear, atomic commits
|
|
73
|
+
|
|
74
|
+
3. Push to your fork and create a Pull Request
|
|
75
|
+
|
|
76
|
+
### Commit Messages
|
|
77
|
+
|
|
78
|
+
Write clear, descriptive commit messages:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
Add support for triangular array geometry
|
|
82
|
+
|
|
83
|
+
- Implement triangular element positioning
|
|
84
|
+
- Add tests for new geometry type
|
|
85
|
+
- Update documentation with examples
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Pull Request Guidelines
|
|
89
|
+
|
|
90
|
+
- **Title:** Use a clear, descriptive title
|
|
91
|
+
- **Description:** Explain what changes you made and why
|
|
92
|
+
- **Tests:** Add tests for new functionality
|
|
93
|
+
- **Documentation:** Update docs if adding new features
|
|
94
|
+
- **Small PRs:** Keep changes focused; large changes should be split into multiple PRs
|
|
95
|
+
|
|
96
|
+
## What to Contribute
|
|
97
|
+
|
|
98
|
+
### Good First Issues
|
|
99
|
+
|
|
100
|
+
Look for issues labeled `good first issue` - these are ideal for newcomers.
|
|
101
|
+
|
|
102
|
+
### Areas We Need Help
|
|
103
|
+
|
|
104
|
+
- **New models:** Additional propagation models, antenna patterns
|
|
105
|
+
- **Documentation:** Tutorials, examples, API docs improvements
|
|
106
|
+
- **Testing:** Increase test coverage, add edge case tests
|
|
107
|
+
- **Performance:** Optimization of batch evaluation, caching improvements
|
|
108
|
+
- **Visualization:** New plot types, interactive visualizations
|
|
109
|
+
|
|
110
|
+
### Feature Requests
|
|
111
|
+
|
|
112
|
+
Before starting on a large feature:
|
|
113
|
+
1. Check existing issues to avoid duplicates
|
|
114
|
+
2. Open an issue describing the feature
|
|
115
|
+
3. Wait for discussion/approval before implementing
|
|
116
|
+
|
|
117
|
+
## Code Style
|
|
118
|
+
|
|
119
|
+
### Python Style
|
|
120
|
+
|
|
121
|
+
- Follow PEP 8 (enforced by ruff)
|
|
122
|
+
- Use type hints for all public functions
|
|
123
|
+
- Use Google-style docstrings
|
|
124
|
+
- Keep functions focused and under 50 lines when possible
|
|
125
|
+
|
|
126
|
+
### Docstring Example
|
|
127
|
+
|
|
128
|
+
```python
|
|
129
|
+
def compute_link_margin(
|
|
130
|
+
eirp_dbw: float,
|
|
131
|
+
path_loss_db: float,
|
|
132
|
+
required_snr_db: float,
|
|
133
|
+
) -> dict[str, float]:
|
|
134
|
+
"""Compute the communications link margin.
|
|
135
|
+
|
|
136
|
+
Calculates received SNR and margin to the required threshold
|
|
137
|
+
for a point-to-point link.
|
|
138
|
+
|
|
139
|
+
Args:
|
|
140
|
+
eirp_dbw: Effective Isotropic Radiated Power in dBW.
|
|
141
|
+
path_loss_db: Total path loss in dB.
|
|
142
|
+
required_snr_db: Required SNR for demodulation in dB.
|
|
143
|
+
|
|
144
|
+
Returns:
|
|
145
|
+
Dictionary containing:
|
|
146
|
+
- snr_db: Received signal-to-noise ratio
|
|
147
|
+
- margin_db: Margin above required SNR (positive = passes)
|
|
148
|
+
|
|
149
|
+
Raises:
|
|
150
|
+
ValueError: If any input is NaN or infinite.
|
|
151
|
+
|
|
152
|
+
Example:
|
|
153
|
+
>>> result = compute_link_margin(50.0, 150.0, 10.0)
|
|
154
|
+
>>> print(f"Margin: {result['margin_db']:.1f} dB")
|
|
155
|
+
"""
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Testing Guidelines
|
|
159
|
+
|
|
160
|
+
- Test both happy path and edge cases
|
|
161
|
+
- Use descriptive test names: `test_extract_pareto_with_empty_dataframe`
|
|
162
|
+
- Use pytest fixtures for shared setup
|
|
163
|
+
- Mock external dependencies (e.g., `phased-array-modeling`)
|
|
164
|
+
|
|
165
|
+
## Documentation
|
|
166
|
+
|
|
167
|
+
### Building Docs Locally
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# Install docs dependencies
|
|
171
|
+
pip install -e ".[docs]"
|
|
172
|
+
|
|
173
|
+
# Serve locally with live reload
|
|
174
|
+
mkdocs serve
|
|
175
|
+
|
|
176
|
+
# Build static site
|
|
177
|
+
mkdocs build
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Documentation Structure
|
|
181
|
+
|
|
182
|
+
- `docs/getting-started/` - Installation and quickstart
|
|
183
|
+
- `docs/user-guide/` - Detailed usage guides
|
|
184
|
+
- `docs/tutorials/` - Step-by-step tutorials
|
|
185
|
+
- `docs/api/` - API reference (auto-generated from docstrings)
|
|
186
|
+
- `docs/theory/` - Background theory and equations
|
|
187
|
+
|
|
188
|
+
## Release Process
|
|
189
|
+
|
|
190
|
+
Releases are managed by maintainers:
|
|
191
|
+
|
|
192
|
+
1. Update `__about__.py` with new version
|
|
193
|
+
2. Update `CHANGELOG.md`
|
|
194
|
+
3. Create a GitHub release with tag `vX.Y.Z`
|
|
195
|
+
4. GitHub Actions will publish to PyPI
|
|
196
|
+
|
|
197
|
+
## Getting Help
|
|
198
|
+
|
|
199
|
+
- **Questions:** Open a GitHub Discussion
|
|
200
|
+
- **Bugs:** Open a GitHub Issue
|
|
201
|
+
- **Security:** Email maintainers directly (do not open public issues)
|
|
202
|
+
|
|
203
|
+
## Recognition
|
|
204
|
+
|
|
205
|
+
Contributors are recognized in:
|
|
206
|
+
- The GitHub contributors page
|
|
207
|
+
- Release notes for significant contributions
|
|
208
|
+
- The project README for major contributions
|
|
209
|
+
|
|
210
|
+
Thank you for contributing to phased-array-systems!
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: phased-array-systems
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: Phased array antenna system design, optimization, and performance visualization
|
|
5
5
|
Project-URL: Homepage, https://github.com/jman4162/phased-array-systems
|
|
6
|
-
Project-URL: Documentation, https://github.
|
|
6
|
+
Project-URL: Documentation, https://jman4162.github.io/phased-array-systems
|
|
7
7
|
Project-URL: Repository, https://github.com/jman4162/phased-array-systems
|
|
8
8
|
Project-URL: Issues, https://github.com/jman4162/phased-array-systems/issues
|
|
9
|
+
Project-URL: Changelog, https://jman4162.github.io/phased-array-systems/changelog
|
|
9
10
|
Author: phased-array-systems contributors
|
|
10
11
|
License-Expression: MIT
|
|
11
12
|
License-File: LICENSE
|
|
@@ -35,6 +36,14 @@ Requires-Dist: pandas-stubs>=2.0; extra == 'dev'
|
|
|
35
36
|
Requires-Dist: pytest-cov>=4.0; extra == 'dev'
|
|
36
37
|
Requires-Dist: pytest>=7.0; extra == 'dev'
|
|
37
38
|
Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
39
|
+
Provides-Extra: docs
|
|
40
|
+
Requires-Dist: mkdocs-gen-files>=0.5; extra == 'docs'
|
|
41
|
+
Requires-Dist: mkdocs-jupyter>=0.24; extra == 'docs'
|
|
42
|
+
Requires-Dist: mkdocs-literate-nav>=0.6; extra == 'docs'
|
|
43
|
+
Requires-Dist: mkdocs-material>=9.4; extra == 'docs'
|
|
44
|
+
Requires-Dist: mkdocs-section-index>=0.3; extra == 'docs'
|
|
45
|
+
Requires-Dist: mkdocs>=1.5; extra == 'docs'
|
|
46
|
+
Requires-Dist: mkdocstrings[python]>=0.24; extra == 'docs'
|
|
38
47
|
Provides-Extra: plotting
|
|
39
48
|
Requires-Dist: kaleido>=0.2; extra == 'plotting'
|
|
40
49
|
Requires-Dist: plotly>=5.0; extra == 'plotting'
|
|
@@ -43,18 +52,43 @@ Description-Content-Type: text/markdown
|
|
|
43
52
|
# phased-array-systems
|
|
44
53
|
|
|
45
54
|
[](https://github.com/jman4162/phased-array-systems/actions/workflows/ci.yml)
|
|
55
|
+
[](https://jman4162.github.io/phased-array-systems)
|
|
46
56
|
[](https://badge.fury.io/py/phased-array-systems)
|
|
47
57
|
[](https://www.python.org/downloads/)
|
|
48
58
|
[](https://opensource.org/licenses/MIT)
|
|
49
59
|
|
|
50
60
|
Phased array antenna system design, optimization, and performance visualization for wireless communications and radar applications.
|
|
51
61
|
|
|
62
|
+
**[Documentation](https://jman4162.github.io/phased-array-systems)** |
|
|
63
|
+
**[Getting Started](https://jman4162.github.io/phased-array-systems/getting-started/quickstart/)** |
|
|
64
|
+
**[API Reference](https://jman4162.github.io/phased-array-systems/api/)**
|
|
65
|
+
|
|
66
|
+
## Why phased-array-systems?
|
|
67
|
+
|
|
68
|
+
- **Model-Based Workflow**: MBSE/MDAO approach from requirements through optimized designs
|
|
69
|
+
- **Requirements-Driven**: Every evaluation produces pass/fail with margins and traceability
|
|
70
|
+
- **Trade-Space Exploration**: DOE generation and Pareto analysis for systematic design exploration
|
|
71
|
+
- **Dual Application**: Supports both communications link budgets and radar detection scenarios
|
|
72
|
+
- **Reproducible**: Config-driven workflow with seed control and version stamping
|
|
73
|
+
|
|
74
|
+
## Workflow
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
Config (YAML/JSON) → Architecture + Scenario → DOE Generation → Batch Evaluation
|
|
78
|
+
↓ ↓
|
|
79
|
+
Requirements ───────────────────────────────────────────→ Verification
|
|
80
|
+
↓
|
|
81
|
+
Reports ← Visualization ← Pareto Extraction ←──┘
|
|
82
|
+
```
|
|
83
|
+
|
|
52
84
|
## Features
|
|
53
85
|
|
|
54
86
|
- **Requirements as first-class objects**: Every run produces pass/fail + margins with traceability
|
|
55
87
|
- **Trade-space exploration**: DOE + Pareto optimization over single-point designs
|
|
88
|
+
- **Communications & Radar**: Link budget analysis and radar detection modeling
|
|
56
89
|
- **Flat metrics dictionary**: All models return consistent `dict[str, float]` for interchange
|
|
57
90
|
- **Config-driven reproducibility**: Stable case IDs, seed control, version stamping
|
|
91
|
+
- **CLI and Python API**: Use from command line or integrate into scripts
|
|
58
92
|
|
|
59
93
|
## Installation
|
|
60
94
|
|
|
@@ -169,6 +203,49 @@ pytest tests/ -v
|
|
|
169
203
|
ruff check .
|
|
170
204
|
```
|
|
171
205
|
|
|
206
|
+
## CLI
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
# Single case evaluation
|
|
210
|
+
pasys run config.yaml
|
|
211
|
+
|
|
212
|
+
# DOE batch study
|
|
213
|
+
pasys doe config.yaml -n 100 --method lhs
|
|
214
|
+
|
|
215
|
+
# Generate report
|
|
216
|
+
pasys report results.parquet --format html
|
|
217
|
+
|
|
218
|
+
# Extract Pareto frontier
|
|
219
|
+
pasys pareto results.parquet -x cost_usd -y eirp_dbw --plot
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Documentation
|
|
223
|
+
|
|
224
|
+
Full documentation is available at **[jman4162.github.io/phased-array-systems](https://jman4162.github.io/phased-array-systems)**:
|
|
225
|
+
|
|
226
|
+
- [Getting Started](https://jman4162.github.io/phased-array-systems/getting-started/quickstart/) - Installation and quickstart
|
|
227
|
+
- [User Guide](https://jman4162.github.io/phased-array-systems/user-guide/) - Detailed usage guides
|
|
228
|
+
- [Tutorials](https://jman4162.github.io/phased-array-systems/tutorials/) - Step-by-step walkthroughs
|
|
229
|
+
- [API Reference](https://jman4162.github.io/phased-array-systems/api/) - Complete API documentation
|
|
230
|
+
- [Theory](https://jman4162.github.io/phased-array-systems/theory/) - Background equations and theory
|
|
231
|
+
|
|
232
|
+
## Citation
|
|
233
|
+
|
|
234
|
+
If you use phased-array-systems in academic work, please cite:
|
|
235
|
+
|
|
236
|
+
```bibtex
|
|
237
|
+
@software{phased_array_systems,
|
|
238
|
+
title = {phased-array-systems: Phased Array Antenna System Design and Optimization},
|
|
239
|
+
author = {{phased-array-systems contributors}},
|
|
240
|
+
year = {2024},
|
|
241
|
+
url = {https://github.com/jman4162/phased-array-systems}
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Contributing
|
|
246
|
+
|
|
247
|
+
We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
248
|
+
|
|
172
249
|
## License
|
|
173
250
|
|
|
174
251
|
MIT License - see [LICENSE](LICENSE) for details.
|
|
@@ -1,18 +1,43 @@
|
|
|
1
1
|
# phased-array-systems
|
|
2
2
|
|
|
3
3
|
[](https://github.com/jman4162/phased-array-systems/actions/workflows/ci.yml)
|
|
4
|
+
[](https://jman4162.github.io/phased-array-systems)
|
|
4
5
|
[](https://badge.fury.io/py/phased-array-systems)
|
|
5
6
|
[](https://www.python.org/downloads/)
|
|
6
7
|
[](https://opensource.org/licenses/MIT)
|
|
7
8
|
|
|
8
9
|
Phased array antenna system design, optimization, and performance visualization for wireless communications and radar applications.
|
|
9
10
|
|
|
11
|
+
**[Documentation](https://jman4162.github.io/phased-array-systems)** |
|
|
12
|
+
**[Getting Started](https://jman4162.github.io/phased-array-systems/getting-started/quickstart/)** |
|
|
13
|
+
**[API Reference](https://jman4162.github.io/phased-array-systems/api/)**
|
|
14
|
+
|
|
15
|
+
## Why phased-array-systems?
|
|
16
|
+
|
|
17
|
+
- **Model-Based Workflow**: MBSE/MDAO approach from requirements through optimized designs
|
|
18
|
+
- **Requirements-Driven**: Every evaluation produces pass/fail with margins and traceability
|
|
19
|
+
- **Trade-Space Exploration**: DOE generation and Pareto analysis for systematic design exploration
|
|
20
|
+
- **Dual Application**: Supports both communications link budgets and radar detection scenarios
|
|
21
|
+
- **Reproducible**: Config-driven workflow with seed control and version stamping
|
|
22
|
+
|
|
23
|
+
## Workflow
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
Config (YAML/JSON) → Architecture + Scenario → DOE Generation → Batch Evaluation
|
|
27
|
+
↓ ↓
|
|
28
|
+
Requirements ───────────────────────────────────────────→ Verification
|
|
29
|
+
↓
|
|
30
|
+
Reports ← Visualization ← Pareto Extraction ←──┘
|
|
31
|
+
```
|
|
32
|
+
|
|
10
33
|
## Features
|
|
11
34
|
|
|
12
35
|
- **Requirements as first-class objects**: Every run produces pass/fail + margins with traceability
|
|
13
36
|
- **Trade-space exploration**: DOE + Pareto optimization over single-point designs
|
|
37
|
+
- **Communications & Radar**: Link budget analysis and radar detection modeling
|
|
14
38
|
- **Flat metrics dictionary**: All models return consistent `dict[str, float]` for interchange
|
|
15
39
|
- **Config-driven reproducibility**: Stable case IDs, seed control, version stamping
|
|
40
|
+
- **CLI and Python API**: Use from command line or integrate into scripts
|
|
16
41
|
|
|
17
42
|
## Installation
|
|
18
43
|
|
|
@@ -127,6 +152,49 @@ pytest tests/ -v
|
|
|
127
152
|
ruff check .
|
|
128
153
|
```
|
|
129
154
|
|
|
155
|
+
## CLI
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
# Single case evaluation
|
|
159
|
+
pasys run config.yaml
|
|
160
|
+
|
|
161
|
+
# DOE batch study
|
|
162
|
+
pasys doe config.yaml -n 100 --method lhs
|
|
163
|
+
|
|
164
|
+
# Generate report
|
|
165
|
+
pasys report results.parquet --format html
|
|
166
|
+
|
|
167
|
+
# Extract Pareto frontier
|
|
168
|
+
pasys pareto results.parquet -x cost_usd -y eirp_dbw --plot
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Documentation
|
|
172
|
+
|
|
173
|
+
Full documentation is available at **[jman4162.github.io/phased-array-systems](https://jman4162.github.io/phased-array-systems)**:
|
|
174
|
+
|
|
175
|
+
- [Getting Started](https://jman4162.github.io/phased-array-systems/getting-started/quickstart/) - Installation and quickstart
|
|
176
|
+
- [User Guide](https://jman4162.github.io/phased-array-systems/user-guide/) - Detailed usage guides
|
|
177
|
+
- [Tutorials](https://jman4162.github.io/phased-array-systems/tutorials/) - Step-by-step walkthroughs
|
|
178
|
+
- [API Reference](https://jman4162.github.io/phased-array-systems/api/) - Complete API documentation
|
|
179
|
+
- [Theory](https://jman4162.github.io/phased-array-systems/theory/) - Background equations and theory
|
|
180
|
+
|
|
181
|
+
## Citation
|
|
182
|
+
|
|
183
|
+
If you use phased-array-systems in academic work, please cite:
|
|
184
|
+
|
|
185
|
+
```bibtex
|
|
186
|
+
@software{phased_array_systems,
|
|
187
|
+
title = {phased-array-systems: Phased Array Antenna System Design and Optimization},
|
|
188
|
+
author = {{phased-array-systems contributors}},
|
|
189
|
+
year = {2024},
|
|
190
|
+
url = {https://github.com/jman4162/phased-array-systems}
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Contributing
|
|
195
|
+
|
|
196
|
+
We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
197
|
+
|
|
130
198
|
## License
|
|
131
199
|
|
|
132
200
|
MIT License - see [LICENSE](LICENSE) for details.
|