phased-array-systems 0.1.0__tar.gz → 0.1.2__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.1.0 → phased_array_systems-0.1.2}/.gitignore +1 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/PKG-INFO +1 -1
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/__about__.py +1 -1
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/models/antenna/metrics.py +2 -1
- phased_array_systems-0.1.0/package_design_and_requirements.txt +0 -531
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/.github/workflows/ci.yml +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/.github/workflows/publish.yml +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/CLAUDE.md +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/LICENSE +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/README.md +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/examples/01_comms_single_case.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/examples/02_comms_doe_trade.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/examples/configs/comms_basic.yaml +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/examples/configs/comms_doe.yaml +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/notebooks/tutorial_phased_array_trade_study.ipynb +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/pyproject.toml +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/ruff.toml +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/__init__.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/architecture/__init__.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/architecture/config.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/cli.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/constants.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/evaluate.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/io/__init__.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/io/config_loader.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/io/exporters.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/io/schema.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/models/__init__.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/models/antenna/__init__.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/models/antenna/adapter.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/models/base.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/models/comms/__init__.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/models/comms/link_budget.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/models/comms/propagation.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/models/swapc/__init__.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/models/swapc/cost.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/models/swapc/power.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/requirements/__init__.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/requirements/core.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/scenarios/__init__.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/scenarios/base.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/scenarios/comms.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/scenarios/radar.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/trades/__init__.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/trades/design_space.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/trades/doe.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/trades/pareto.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/trades/runner.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/types.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/utils/__init__.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/utils/hashing.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/viz/__init__.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/viz/plots.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/tests/__init__.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/tests/test_antenna_adapter.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/tests/test_architecture.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/tests/test_comms_link_budget.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/tests/test_doe.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/tests/test_evaluate.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/tests/test_pareto.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/tests/test_requirements.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/tests/test_runner.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/tests/test_swapc.py +0 -0
- {phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/tests/test_viz.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: phased-array-systems
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
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
6
|
Project-URL: Documentation, https://github.com/jman4162/phased-array-systems#readme
|
|
@@ -119,7 +119,8 @@ def compute_scan_loss(scan_angle_deg: float, model: str = "cosine") -> float:
|
|
|
119
119
|
if loss_linear <= 0:
|
|
120
120
|
return float("inf")
|
|
121
121
|
|
|
122
|
-
|
|
122
|
+
loss_db = -10 * math.log10(loss_linear)
|
|
123
|
+
return abs(loss_db) if abs(loss_db) < 1e-10 else loss_db # Avoid -0.0 display
|
|
123
124
|
|
|
124
125
|
|
|
125
126
|
def compute_array_gain(n_elements: int, element_gain_db: float = 0.0) -> float:
|
|
@@ -1,531 +0,0 @@
|
|
|
1
|
-
```markdown
|
|
2
|
-
# Phased Array Systems — Software Design Document (SDD) & Requirements
|
|
3
|
-
**Package name (working):** `phased-array-systems`
|
|
4
|
-
**Purpose:** Open-source Python package for phased array antenna **system design**, **optimization**, and **performance visualization** for advanced **wireless communications** and **radar** applications.
|
|
5
|
-
**Core dependency:** [`phased-array-modeling`](https://pypi.org/project/phased-array-modeling/) / [`Phased-Array-Antenna-Model`](https://github.com/jman4162/Phased-Array-Antenna-Model)
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Table of Contents
|
|
10
|
-
1. Purpose and Scope
|
|
11
|
-
2. Design Principles (MBSE/MDAO Inspired)
|
|
12
|
-
3. Users and Primary Use Cases
|
|
13
|
-
4. Non-Goals
|
|
14
|
-
5. System Overview and Architecture
|
|
15
|
-
- 5.1 High-level Architecture
|
|
16
|
-
- 5.2 Package Structure (Completed)
|
|
17
|
-
6. Operating Concept and End-to-End Flows
|
|
18
|
-
7. External Dependencies and Versioning
|
|
19
|
-
8. System Boundary and Interfaces
|
|
20
|
-
9. Key Design Decisions
|
|
21
|
-
10. Canonical Metrics Dictionary Contract
|
|
22
|
-
11. Error Handling, Logging, and Diagnostics
|
|
23
|
-
12. Security, Licensing, and Compliance
|
|
24
|
-
13. Testing, Documentation, and Release Engineering
|
|
25
|
-
14. Detailed Component Specifications
|
|
26
|
-
15. Trade Study and Optimization Engine Design
|
|
27
|
-
16. Visualization and Reporting
|
|
28
|
-
17. Configuration Schema (YAML/JSON)
|
|
29
|
-
18. Caching, Performance, and Scaling
|
|
30
|
-
19. Plugin Architecture (Extensibility)
|
|
31
|
-
20. Repository Deliverables and Acceptance Criteria
|
|
32
|
-
21. Build Plan (Agent-Ready Work Breakdown)
|
|
33
|
-
22. Appendices (Templates, Examples, Future Work)
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## 1) Purpose and Scope
|
|
38
|
-
Build a Python package that supports:
|
|
39
|
-
- **Antenna + beamforming modeling** via `phased-array-modeling`
|
|
40
|
-
- **System-level performance modeling** (comms link budget, radar detection)
|
|
41
|
-
- **SWaP-C + cost modeling** (parametric)
|
|
42
|
-
- **Trade studies** (DOE, sensitivity, Pareto)
|
|
43
|
-
- **Optimization** (constrained, multi-objective optional)
|
|
44
|
-
- **Performance visualization** and **report generation**
|
|
45
|
-
- **Requirements capture & verification** (lightweight MBSE traceability)
|
|
46
|
-
|
|
47
|
-
This package is meant to encapsulate your model-based engineering / MDAO workflow: connect requirements → architecture → analytical models → trade studies → Pareto selection → reporting.
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## 2) Design Principles (MBSE/MDAO Inspired)
|
|
52
|
-
1. **Traceability:** Requirements are first-class objects; every run produces pass/fail + margins.
|
|
53
|
-
2. **Composability:** Performance = integrated blocks (antenna + RF + propagation + radar/comms + SWaP-C).
|
|
54
|
-
3. **Trade-space first:** DOE + constraint filtering + Pareto > single-point “best” design.
|
|
55
|
-
4. **Fidelity growth:** Start fast with analytical models; optionally import “installed patterns” later.
|
|
56
|
-
5. **Reproducibility:** Config-driven runs; stable case IDs; seed control; version stamping.
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## 3) Users and Primary Use Cases
|
|
61
|
-
### Personas
|
|
62
|
-
- Phased array systems engineer (architecture trades)
|
|
63
|
-
- Radar engineer (detection / search performance)
|
|
64
|
-
- Wireless comms engineer (link margin, EIRP, multi-beam trades)
|
|
65
|
-
- Researcher/educator (reproducible notebooks)
|
|
66
|
-
|
|
67
|
-
### Use Cases
|
|
68
|
-
- Comms link feasibility & power–aperture trades
|
|
69
|
-
- Radar detection margin vs range/RCS vs aperture
|
|
70
|
-
- Architecture comparison (element/tile/subarray choices vs requirements)
|
|
71
|
-
- Sensitivity analysis (scatter matrices, correlation, optional Sobol)
|
|
72
|
-
- Constrained optimization (min cost/weight/power while meeting margins)
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## 4) Non-Goals
|
|
77
|
-
- Not a full-wave EM solver (HFSS/CST/FEKO replacement).
|
|
78
|
-
- Not a SysML authoring environment.
|
|
79
|
-
- Not a real-time DSP radar tracker; this is a design-time trade tool.
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
## 5) System Overview and Architecture
|
|
84
|
-
|
|
85
|
-
### 5.1 High-level Architecture
|
|
86
|
-
|
|
87
|
-
**Layer 0 — Antenna modeling dependency**
|
|
88
|
-
- `phased-array-modeling`: geometry + weights + impairments + pattern + visualization primitives.
|
|
89
|
-
|
|
90
|
-
**Layer 1 — System models (this package)**
|
|
91
|
-
- Requirements & verification
|
|
92
|
-
- Architecture description (array + RF + SWaP-C + cost)
|
|
93
|
-
- Comms / radar performance models
|
|
94
|
-
- Trade study + optimization engine
|
|
95
|
-
- Visualization + reporting
|
|
96
|
-
|
|
97
|
-
**Layer 2 — Interfaces**
|
|
98
|
-
- Python API + CLI
|
|
99
|
-
- Config IO (YAML/JSON)
|
|
100
|
-
- Results export (CSV/Parquet/JSON)
|
|
101
|
-
- Optional installed-pattern import adapters
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
### 5.2 Package Structure (Completed)
|
|
106
|
-
|
|
107
|
-
#### A) Top-level repository structure
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
phased-array-systems/
|
|
111
|
-
├─ README.md
|
|
112
|
-
├─ LICENSE
|
|
113
|
-
├─ CHANGELOG.md
|
|
114
|
-
├─ CITATION.cff
|
|
115
|
-
├─ pyproject.toml
|
|
116
|
-
├─ ruff.toml
|
|
117
|
-
├─ .gitignore
|
|
118
|
-
├─ .github/
|
|
119
|
-
│ └─ workflows/
|
|
120
|
-
│ ├─ ci.yml # lint + test + build
|
|
121
|
-
│ └─ publish.yml # publish to PyPI on tag
|
|
122
|
-
├─ docs/
|
|
123
|
-
│ ├─ index.md
|
|
124
|
-
│ ├─ quickstart.md
|
|
125
|
-
│ ├─ tutorials/
|
|
126
|
-
│ │ ├─ comms_trade_study.md
|
|
127
|
-
│ │ ├─ radar_detection.md
|
|
128
|
-
│ │ ├─ doe_pareto.md
|
|
129
|
-
│ │ └─ impairments_sensitivity.md
|
|
130
|
-
│ └─ sdd.md # this document
|
|
131
|
-
├─ examples/
|
|
132
|
-
│ ├─ 01_comms_trade_study.py
|
|
133
|
-
│ ├─ 02_radar_detection_trade.py
|
|
134
|
-
│ ├─ 03_multiobjective_pareto.py
|
|
135
|
-
│ ├─ 04_impairments_sensitivity.py
|
|
136
|
-
│ └─ configs/
|
|
137
|
-
│ ├─ comms_trade.yaml
|
|
138
|
-
│ └─ radar_trade.yaml
|
|
139
|
-
├─ src/
|
|
140
|
-
│ └─ phased_array_systems/
|
|
141
|
-
│ ├─ **init**.py
|
|
142
|
-
│ ├─ **about**.py # version, metadata
|
|
143
|
-
│ ├─ cli.py # pasys entrypoint
|
|
144
|
-
│ ├─ constants.py # physical constants, defaults
|
|
145
|
-
│ ├─ types.py # shared type aliases / protocols
|
|
146
|
-
│ ├─ requirements/
|
|
147
|
-
│ │ ├─ **init**.py
|
|
148
|
-
│ │ ├─ core.py # Requirement, RequirementSet, VerificationReport
|
|
149
|
-
│ │ └─ expressions.py # declarative ops, safe expression helpers
|
|
150
|
-
│ ├─ architecture/
|
|
151
|
-
│ │ ├─ **init**.py
|
|
152
|
-
│ │ ├─ config.py # Architecture, ArrayConfig, RFChainConfig, etc.
|
|
153
|
-
│ │ └─ variants.py # baseline + override support
|
|
154
|
-
│ ├─ scenarios/
|
|
155
|
-
│ │ ├─ **init**.py
|
|
156
|
-
│ │ ├─ base.py # Scenario protocol/base
|
|
157
|
-
│ │ ├─ comms.py # CommsLinkScenario schema
|
|
158
|
-
│ │ └─ radar.py # RadarDetectionScenario schema
|
|
159
|
-
│ ├─ models/
|
|
160
|
-
│ │ ├─ **init**.py
|
|
161
|
-
│ │ ├─ base.py # ModelBlock protocol (evaluate contract)
|
|
162
|
-
│ │ ├─ antenna/
|
|
163
|
-
│ │ │ ├─ **init**.py
|
|
164
|
-
│ │ │ ├─ adapter.py # wraps phased-array-modeling
|
|
165
|
-
│ │ │ ├─ metrics.py # beamwidth/SLL/scan loss extraction
|
|
166
|
-
│ │ │ └─ installed.py # optional installed-pattern override interface
|
|
167
|
-
│ │ ├─ comms/
|
|
168
|
-
│ │ │ ├─ **init**.py
|
|
169
|
-
│ │ │ ├─ link_budget.py # SNR, margin, EIRP, noise
|
|
170
|
-
│ │ │ └─ propagation.py # FSPL default, hooks for ITU-R
|
|
171
|
-
│ │ ├─ radar/
|
|
172
|
-
│ │ │ ├─ **init**.py
|
|
173
|
-
│ │ │ ├─ radar_eq.py # radar equation utilities
|
|
174
|
-
│ │ │ └─ detection.py # PD/PFA threshold helpers + integration gains
|
|
175
|
-
│ │ ├─ swapc/
|
|
176
|
-
│ │ │ ├─ **init**.py
|
|
177
|
-
│ │ │ ├─ power.py # prime power, PA efficiency, beam split
|
|
178
|
-
│ │ │ ├─ thermal.py # simple thermal models (optional early)
|
|
179
|
-
│ │ │ └─ cost.py # parametric cost models
|
|
180
|
-
│ │ └─ mission/
|
|
181
|
-
│ │ ├─ **init**.py
|
|
182
|
-
│ │ └─ scoring.py # optional mission-level scoring functions
|
|
183
|
-
│ ├─ trades/
|
|
184
|
-
│ │ ├─ **init**.py
|
|
185
|
-
│ │ ├─ design_space.py # variable definitions, bounds, categorical vars
|
|
186
|
-
│ │ ├─ doe.py # sampling (grid, random, LHS, Sobol optional)
|
|
187
|
-
│ │ ├─ runner.py # batch eval, parallelism, resume
|
|
188
|
-
│ │ ├─ pareto.py # pareto extraction, knee points, ranking
|
|
189
|
-
│ │ ├─ optimize.py # constrained optimization wrappers
|
|
190
|
-
│ │ └─ sensitivity.py # correlation, scatter-matrix helpers
|
|
191
|
-
│ ├─ viz/
|
|
192
|
-
│ │ ├─ **init**.py
|
|
193
|
-
│ │ ├─ plots.py # pareto, scatter, constraint shading
|
|
194
|
-
│ │ ├─ dashboards.py # optional interactive plotly dashboards
|
|
195
|
-
│ │ └─ reports.py # HTML/Markdown report generation
|
|
196
|
-
│ ├─ io/
|
|
197
|
-
│ │ ├─ **init**.py
|
|
198
|
-
│ │ ├─ schema.py # pydantic schemas: config + results
|
|
199
|
-
│ │ ├─ config_loader.py # YAML/JSON load/validate + overrides
|
|
200
|
-
│ │ ├─ exporters.py # CSV/JSON/Parquet
|
|
201
|
-
│ │ └─ importers.py # requirements import, installed pattern import
|
|
202
|
-
│ └─ utils/
|
|
203
|
-
│ ├─ **init**.py
|
|
204
|
-
│ ├─ cache.py # LRU + disk cache
|
|
205
|
-
│ ├─ hashing.py # stable case IDs
|
|
206
|
-
│ └─ logging.py # logging setup
|
|
207
|
-
└─ tests/
|
|
208
|
-
├─ test_requirements.py
|
|
209
|
-
├─ test_comms_link_budget.py
|
|
210
|
-
├─ test_radar_equation.py
|
|
211
|
-
├─ test_antenna_adapter_small.py
|
|
212
|
-
├─ test_doe_runner_resume.py
|
|
213
|
-
└─ data/
|
|
214
|
-
├─ golden_case_config.yaml
|
|
215
|
-
└─ golden_case_results.json
|
|
216
|
-
|
|
217
|
-
````
|
|
218
|
-
|
|
219
|
-
#### B) Key internal contracts (cross-module)
|
|
220
|
-
- **Metrics dictionary** is the universal exchange format.
|
|
221
|
-
- **ModelBlock** interface: `evaluate(arch, scenario, context) -> metrics`.
|
|
222
|
-
- **RequirementSet** verifies metrics and produces `VerificationReport`.
|
|
223
|
-
- **Runner** orchestrates evaluation pipelines and records metadata, errors, and timing.
|
|
224
|
-
|
|
225
|
-
---
|
|
226
|
-
|
|
227
|
-
## 6) Operating Concept and End-to-End Flows
|
|
228
|
-
|
|
229
|
-
### 6.1 Single design evaluation (“Design Report”)
|
|
230
|
-
1. Load/validate config
|
|
231
|
-
2. Build `Architecture` + `Scenario` + `RequirementSet`
|
|
232
|
-
3. Antenna adapter computes pattern metrics
|
|
233
|
-
4. Comms/radar model computes performance metrics
|
|
234
|
-
5. SWaP-C + cost models compute non-performance metrics
|
|
235
|
-
6. Verify requirements
|
|
236
|
-
7. Produce report + exports
|
|
237
|
-
|
|
238
|
-
### 6.2 DOE trade study flow
|
|
239
|
-
1. Create DOE cases from `DesignSpace`
|
|
240
|
-
2. Evaluate each case (parallel + cached)
|
|
241
|
-
3. Filter infeasible designs
|
|
242
|
-
4. Extract Pareto front + knee point(s)
|
|
243
|
-
5. Plot + report
|
|
244
|
-
|
|
245
|
-
### 6.3 Optimization flow
|
|
246
|
-
1. Choose solver (scipy baseline; multiobjective optional)
|
|
247
|
-
2. Iterate evaluate → verify → score
|
|
248
|
-
3. Return best design + traceability artifact
|
|
249
|
-
|
|
250
|
-
---
|
|
251
|
-
|
|
252
|
-
## 7) External Dependencies and Versioning
|
|
253
|
-
|
|
254
|
-
### Runtime deps (baseline)
|
|
255
|
-
- `phased-array-modeling>=1.2.0`
|
|
256
|
-
- `numpy`, `scipy`
|
|
257
|
-
- `pydantic`
|
|
258
|
-
- `matplotlib`
|
|
259
|
-
- `pandas` *or* `polars` (choose one initially)
|
|
260
|
-
|
|
261
|
-
### Optional extras
|
|
262
|
-
- `plotly`, `kaleido` (interactive/export)
|
|
263
|
-
- `joblib` (disk cache)
|
|
264
|
-
- `pint` (units)
|
|
265
|
-
- `pymoo` / `nevergrad` (mixed multiobjective)
|
|
266
|
-
|
|
267
|
-
### Versioning
|
|
268
|
-
- SemVer
|
|
269
|
-
- Outputs always store: package version, dependency versions, seed, and (if available) git SHA.
|
|
270
|
-
|
|
271
|
-
---
|
|
272
|
-
|
|
273
|
-
## 8) System Boundary and Interfaces
|
|
274
|
-
### In-scope
|
|
275
|
-
- Python API
|
|
276
|
-
- CLI (`pasys`)
|
|
277
|
-
- Config IO (YAML/JSON)
|
|
278
|
-
- Results export (CSV/Parquet/JSON)
|
|
279
|
-
- HTML/Markdown reporting
|
|
280
|
-
|
|
281
|
-
### Out-of-scope (v0.1)
|
|
282
|
-
- GUI application
|
|
283
|
-
- Direct SysML tool integration (only import/export mappings)
|
|
284
|
-
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
## 9) Key Design Decisions
|
|
288
|
-
1. Delegate array pattern generation to `phased-array-modeling`.
|
|
289
|
-
2. Use a flat, stable **metrics dictionary** for all model interchange.
|
|
290
|
-
3. Treat requirements as data (declarative ops) with safe extension hooks.
|
|
291
|
-
4. Make DOE+Pareto pipeline first-class and reproducible (case IDs + seeds).
|
|
292
|
-
|
|
293
|
-
---
|
|
294
|
-
|
|
295
|
-
## 10) Canonical Metrics Dictionary Contract (Keys + Units)
|
|
296
|
-
|
|
297
|
-
### Antenna
|
|
298
|
-
- `g_peak_db` (dBi-like proxy)
|
|
299
|
-
- `beamwidth_az_deg`, `beamwidth_el_deg`
|
|
300
|
-
- `sll_db`
|
|
301
|
-
- `scan_angle_deg`
|
|
302
|
-
- `scan_loss_db`
|
|
303
|
-
|
|
304
|
-
### Comms
|
|
305
|
-
- `eirp_dbw`
|
|
306
|
-
- `path_loss_db`
|
|
307
|
-
- `rx_power_dbw`
|
|
308
|
-
- `noise_power_dbw`
|
|
309
|
-
- `snr_rx_db`
|
|
310
|
-
- `required_snr_db`
|
|
311
|
-
- `link_margin_db`
|
|
312
|
-
|
|
313
|
-
### Radar
|
|
314
|
-
- `snr_single_pulse_db`
|
|
315
|
-
- `snr_required_db`
|
|
316
|
-
- `snr_margin_db`
|
|
317
|
-
- `pd`, `pfa`
|
|
318
|
-
- `rcs_m2`, `range_m`
|
|
319
|
-
|
|
320
|
-
### SWaP-C
|
|
321
|
-
- `prime_power_w`
|
|
322
|
-
- `dc_power_w`
|
|
323
|
-
- `weight_kg`
|
|
324
|
-
- `cost_usd`
|
|
325
|
-
- `power_density_w_per_kg` (optional)
|
|
326
|
-
|
|
327
|
-
### Metadata (namespaced)
|
|
328
|
-
- `meta.case_id`
|
|
329
|
-
- `meta.runtime_s`
|
|
330
|
-
- `meta.seed`
|
|
331
|
-
- `meta.error`
|
|
332
|
-
- `meta.error_type`
|
|
333
|
-
- `meta.phased_array_modeling_version`
|
|
334
|
-
- `meta.phased_array_systems_version`
|
|
335
|
-
|
|
336
|
-
---
|
|
337
|
-
|
|
338
|
-
## 11) Error Handling, Logging, and Diagnostics
|
|
339
|
-
- Single-case runs: raise structured exceptions with context.
|
|
340
|
-
- DOE runs: never crash the whole job for one case; record per-case error fields.
|
|
341
|
-
- Store “failed cases” subset and export minimal reproducer config.
|
|
342
|
-
|
|
343
|
-
---
|
|
344
|
-
|
|
345
|
-
## 12) Security, Licensing, and Compliance
|
|
346
|
-
- Configs are data-only (no `eval()`).
|
|
347
|
-
- Recommend MIT or BSD-3 (ensure compatible with dependency).
|
|
348
|
-
- Include LICENSE, optional CITATION.cff.
|
|
349
|
-
|
|
350
|
-
---
|
|
351
|
-
|
|
352
|
-
## 13) Testing, Documentation, and Release Engineering
|
|
353
|
-
### Testing
|
|
354
|
-
- Unit tests: requirements, comms link budget sanity, radar equation sanity, antenna adapter metrics.
|
|
355
|
-
- Regression: golden-case snapshots (config + results).
|
|
356
|
-
- Batch runner test: resume behavior.
|
|
357
|
-
|
|
358
|
-
### Docs
|
|
359
|
-
- Quickstart
|
|
360
|
-
- Tutorials for comms, radar, DOE+Pareto, impairments sensitivity
|
|
361
|
-
|
|
362
|
-
### Release
|
|
363
|
-
- GitHub Actions: lint + tests + build
|
|
364
|
-
- Publish to PyPI on version tags
|
|
365
|
-
|
|
366
|
-
---
|
|
367
|
-
|
|
368
|
-
## 14) Detailed Component Specifications
|
|
369
|
-
|
|
370
|
-
### 14.1 Requirements (`requirements/`)
|
|
371
|
-
- `Requirement` supports declarative constraints or safe callables for complex logic.
|
|
372
|
-
- `RequirementSet.verify(metrics)` returns pass/fail + per-requirement margins.
|
|
373
|
-
|
|
374
|
-
### 14.2 Architecture (`architecture/`)
|
|
375
|
-
- `Architecture` contains `ArrayConfig`, `RFChainConfig`, `PowerThermalConfig`, `CostConfig`.
|
|
376
|
-
- Support variants/overrides for trade studies (baseline + deltas).
|
|
377
|
-
|
|
378
|
-
### 14.3 Antenna adapter (`models/antenna/`)
|
|
379
|
-
- Wrap `phased-array-modeling` to compute patterns and extract consistent metrics.
|
|
380
|
-
- Provide pattern caching keyed by config + angle grid hash.
|
|
381
|
-
|
|
382
|
-
### 14.4 Comms models (`models/comms/`)
|
|
383
|
-
- Link budget produces SNR + margin and exposes propagation model hooks.
|
|
384
|
-
|
|
385
|
-
### 14.5 Radar models (`models/radar/`)
|
|
386
|
-
- Radar equation utilities + detection threshold helpers (PD/PFA) with user override option.
|
|
387
|
-
|
|
388
|
-
### 14.6 SWaP-C + Cost (`models/swapc/`)
|
|
389
|
-
- Parametric power, cost, and (optional early) thermal models; extendable by plugins.
|
|
390
|
-
|
|
391
|
-
---
|
|
392
|
-
|
|
393
|
-
## 15) Trade Study and Optimization Engine (`trades/`)
|
|
394
|
-
|
|
395
|
-
### DOE
|
|
396
|
-
- Methods: grid/random/LHS (Sobol optional)
|
|
397
|
-
- Deterministic seeds; stable `case_id`
|
|
398
|
-
|
|
399
|
-
### Batch runner
|
|
400
|
-
- Parallel evaluation, case-level resume, exception capture
|
|
401
|
-
|
|
402
|
-
### Pareto
|
|
403
|
-
- Feasibility filter → Pareto front → ranking + knee points
|
|
404
|
-
|
|
405
|
-
### Optimization
|
|
406
|
-
- Start: `scipy.optimize` (SLSQP/COBYLA)
|
|
407
|
-
- Optional: multiobjective mixed-variable solver extras
|
|
408
|
-
|
|
409
|
-
---
|
|
410
|
-
|
|
411
|
-
## 16) Visualization and Reporting (`viz/`)
|
|
412
|
-
- Pareto plots, 3D scatter (optional), scatter-matrix, constraint margin histograms
|
|
413
|
-
- Report generator: HTML/Markdown with reproducibility footer
|
|
414
|
-
|
|
415
|
-
---
|
|
416
|
-
|
|
417
|
-
## 17) Configuration Schema (YAML/JSON)
|
|
418
|
-
|
|
419
|
-
### Example config (abbreviated)
|
|
420
|
-
```yaml
|
|
421
|
-
study:
|
|
422
|
-
name: power_aperture_trade
|
|
423
|
-
seed: 123
|
|
424
|
-
scenario:
|
|
425
|
-
type: comms_link
|
|
426
|
-
freq_hz: 1.0e10
|
|
427
|
-
bandwidth_hz: 1.0e8
|
|
428
|
-
range_m: 200000
|
|
429
|
-
required_snr_db: 14
|
|
430
|
-
requirements:
|
|
431
|
-
- id: REQ_LINK_MARGIN
|
|
432
|
-
metric_key: link_margin_db
|
|
433
|
-
op: ">="
|
|
434
|
-
value: 3
|
|
435
|
-
design_space:
|
|
436
|
-
variables:
|
|
437
|
-
nx: {type: int, low: 8, high: 64}
|
|
438
|
-
ny: {type: int, low: 8, high: 64}
|
|
439
|
-
tx_power_w_per_elem: {type: float, low: 0.5, high: 10.0}
|
|
440
|
-
doe:
|
|
441
|
-
method: lhs
|
|
442
|
-
n_samples: 2000
|
|
443
|
-
objectives:
|
|
444
|
-
- metric_key: eirp_dbw
|
|
445
|
-
direction: maximize
|
|
446
|
-
- metric_key: cost_usd
|
|
447
|
-
direction: minimize
|
|
448
|
-
````
|
|
449
|
-
|
|
450
|
-
---
|
|
451
|
-
|
|
452
|
-
## 18) Caching, Performance, and Scaling
|
|
453
|
-
|
|
454
|
-
* Multi-layer caching: pattern cache + case cache
|
|
455
|
-
* Fidelity presets: `fast`, `balanced`, `fidelity`
|
|
456
|
-
* Resume and disk caching recommended for large DOE runs
|
|
457
|
-
|
|
458
|
-
---
|
|
459
|
-
|
|
460
|
-
## 19) Plugin Architecture (Extensibility)
|
|
461
|
-
|
|
462
|
-
* Define `ModelBlock` protocol and allow registry of:
|
|
463
|
-
|
|
464
|
-
* propagation models
|
|
465
|
-
* cost models
|
|
466
|
-
* thermal models
|
|
467
|
-
* mission scoring models
|
|
468
|
-
* Optional: setuptools entrypoints for plugin discovery
|
|
469
|
-
|
|
470
|
-
---
|
|
471
|
-
|
|
472
|
-
## 20) Deliverables and Acceptance Criteria (v0.1)
|
|
473
|
-
|
|
474
|
-
* `pip install phased-array-systems`
|
|
475
|
-
* One comms DOE example: results + Pareto + report
|
|
476
|
-
* One radar detection example: margin report
|
|
477
|
-
* CI passing
|
|
478
|
-
* Docs + tutorials
|
|
479
|
-
|
|
480
|
-
---
|
|
481
|
-
|
|
482
|
-
## 21) Build Plan (Agent-Ready Work Breakdown)
|
|
483
|
-
|
|
484
|
-
### Phase 1: Core scaffolding (MVP)
|
|
485
|
-
|
|
486
|
-
* schemas + config loader
|
|
487
|
-
* requirements verification
|
|
488
|
-
* antenna adapter wrapper
|
|
489
|
-
* comms link budget model + SWaP-C placeholders
|
|
490
|
-
* single-case report
|
|
491
|
-
|
|
492
|
-
### Phase 2: Trade + viz
|
|
493
|
-
|
|
494
|
-
* DOE generator + batch runner + resume
|
|
495
|
-
* Pareto extraction + plots
|
|
496
|
-
* Parquet export
|
|
497
|
-
|
|
498
|
-
### Phase 3: Radar
|
|
499
|
-
|
|
500
|
-
* radar equation + detection threshold helpers
|
|
501
|
-
* radar trade example + plots
|
|
502
|
-
|
|
503
|
-
### Phase 4: CLI + reporting
|
|
504
|
-
|
|
505
|
-
* `pasys run`, `pasys doe`, `pasys pareto`
|
|
506
|
-
* publish-ready packaging
|
|
507
|
-
|
|
508
|
-
---
|
|
509
|
-
|
|
510
|
-
## 22) Appendices
|
|
511
|
-
|
|
512
|
-
### A) Trade Study Templates
|
|
513
|
-
|
|
514
|
-
* Power–aperture comms trade: maximize EIRP / margin vs minimize power/cost
|
|
515
|
-
* EIRP vs cost vs prime power 3D Pareto exploration
|
|
516
|
-
* Radar detection margin vs range/RCS with integration knobs
|
|
517
|
-
|
|
518
|
-
### B) Future Work
|
|
519
|
-
|
|
520
|
-
* Installed-pattern importers for common EM tool exports
|
|
521
|
-
* Beam scheduling/time-sharing models
|
|
522
|
-
* Thermal derating models
|
|
523
|
-
* Calibration / error budgets for radar & comms chains
|
|
524
|
-
|
|
525
|
-
---
|
|
526
|
-
|
|
527
|
-
**End of document**
|
|
528
|
-
|
|
529
|
-
```
|
|
530
|
-
::contentReference[oaicite:0]{index=0}
|
|
531
|
-
```
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/constants.py
RENAMED
|
File without changes
|
{phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/evaluate.py
RENAMED
|
File without changes
|
{phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/io/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/io/exporters.py
RENAMED
|
File without changes
|
{phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/io/schema.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/models/base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/scenarios/base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/trades/doe.py
RENAMED
|
File without changes
|
{phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/trades/pareto.py
RENAMED
|
File without changes
|
{phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/trades/runner.py
RENAMED
|
File without changes
|
|
File without changes
|
{phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/utils/__init__.py
RENAMED
|
File without changes
|
{phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/utils/hashing.py
RENAMED
|
File without changes
|
{phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/viz/__init__.py
RENAMED
|
File without changes
|
{phased_array_systems-0.1.0 → phased_array_systems-0.1.2}/src/phased_array_systems/viz/plots.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|