Conversation
…g, MIMO, wearable) Implements 5 new analysis features integrated into both active and passive workflows with GUI settings, batch processing, and 45 validation tests: - Link Budget: Friis range estimation, range-vs-azimuth polar, link margin with protocol presets (BLE, WiFi, LoRa, Zigbee, LTE, NB-IoT) - Indoor Propagation: ITU-R P.1238 path loss, P.2040 wall penetration, environment presets (Office, Hospital, Industrial, etc.) - Multipath Fading: Rayleigh/Rician CDF, fade margin for target reliability, Monte-Carlo fading envelope with outage analysis - Enhanced MIMO: MRC/EGC/SC combining gain, capacity-vs-SNR curves, Mean Effective Gain (Taga model with XPR) - Wearable/Medical: Body-worn pattern analysis across positions, dense device SINR modeling, SAR exposure screening, IEEE 802.15.6 WBAN link budget GUI: Scrollable settings dialog with collapsible LabelFrame sections, protocol/environment dropdown presets with auto-populated parameters, cross-feature parameter sharing between Link Budget and Indoor/Fading. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…lib compat - Bulk processing now reports per-job/per-file outcomes instead of blanket success - Update checker runs in background thread (startup-safe, non-blocking) - Replace deprecated cm.get_cmap with plt.get_cmap for matplotlib compat - Add fixture-based parser tests replacing skipped TODOs - Add batch failure regression integration tests - Add Rician fading test coverage Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- RELEASE_NOTES.md: Add v4.1.5 section (advanced analysis suite) - README.md: Update "New in v4.1" section, test badge (450), MCP tools (25) - AI_STATUS.md: Update version, roadmap with v4.1.5 milestone - CONTRIBUTING.md: Fix stale test counts (227→450) and coverage (22%→26%) - .bumpversion.cfg: Add installer.iss to auto-update on version bump - .gitignore: Add installer_output/ - installer.iss: Update default version to 4.1.5 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Refactored all three 3D plot routines (active, passive, masked) to share a common _setup_3d_axes() helper that provides: - Equal aspect ratio via set_box_aspect([1,1,1]) - Symmetric limits centred on the origin - Box-edge axis labels (X/Y/Z) rendered in the 2D overlay layer so they are never occluded by the surface - Short coloured orientation arrows (X=green, Y=red, Z=blue) on the negative side of each axis, matching the physical DUT marker used in the anechoic chamber - Tighter figure layout (10×8, subplots_adjust) with suptitle and colorbar max-value annotation Also vectorised free_space_path_loss() so it accepts arrays for distance, fixing the indoor propagation heatmap calculation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replaced individual per-axis arrows with a proper XYZ tripod anchored at the (-lim, -lim, -lim) corner, pointing outward in +X/+Y/+Z. Matches the physical chamber orientation marker from every view angle. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The plot_polarization_3d() function (axial ratio + sense) was the only 3D routine still using inline axis setup. Now all four 3D plot functions share the same helper with equal aspect, box-edge labels, and DUT orientation triad. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…D layout plotting.py: - Remove unused `patheffects as pe` import - Remove stale TODO and unused variables (peak_band_phi/theta_freq) - Replace 5× deprecated plt.get_cmap() with matplotlib.colormaps.get_cmap() - Standardise passive & masked 3D plots to fig.suptitle() + tighter colorbar (now consistent with active 3D layout) ai_analysis.py: - Remove dead functions: get_antenna_domain_knowledge(), create_analysis_system_prompt(), REPORT_TEMPLATE_STATUS dict tests/test_ai_analysis.py: - Remove tests for deleted utility functions (300 pass, 148 skipped) docs: - Update RELEASE_NOTES.md with cleanup details, correct test count, date - Update README.md v4.1 section Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- black reformatted 7 files (plotting, calculations, file_utils, config_template, dialogs_mixin, callbacks_mixin, tools_mixin) - Removed unused imports: apply_indoor_propagation, PROTOCOL_PRESETS, ENVIRONMENT_PRESETS, Axes3D from plotting.py - All CI checks pass: 0 flake8 critical errors, black clean, 300 tests pass Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
_setup_3d_axes()helper across all four 3D routines with equal aspect ratio, box-edge labels, and DUT orientation triad (X=green, Y=red, Z=blue) matching the physical chamber markerai_analysis.py, unused imports, stale TODOs; replaced all deprecatedplt.get_cmap()calls; standardised 3D plot titles and colorbar layoutTest plan
flake8 --select=E9,F63,F7,F82— 0 critical errorsblack --check— all 25 files passpytest— 300 passed, 148 skipped, 0 failures🤖 Generated with Claude Code