Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
151 commits
Select commit Hold shift + click to select a range
82beb30
whole buncha shit
bHimes Dec 21, 2023
6ec2881
Hella Wip
bHimes Jan 18, 2024
81fbf3f
Removes previously deprecated stage of alignment NoAlignment
bHimes Jan 19, 2024
1d8e27d
Removes StageOfAlignment ClassAlignment, as well as old functions to …
bHimes Jan 19, 2024
d46a1a2
Remove SOA RefAlignment
bHimes Jan 19, 2024
6b4671b
Replace all pBH parameter structs with emc in prep for moving all opt…
bHimes Jan 19, 2024
e65636e
Move nPeaks to parser
bHimes Jan 19, 2024
1846ede
Move whitenPS to parser and remove old commented out function from ctf3d
bHimes Jan 19, 2024
be41dad
Remove all optional refs to sf3d_v2 (always on now)
bHimes Jan 19, 2024
5404ede
Manually formated all files, primarily to fix nesting indent inconsit…
bHimes Jan 19, 2024
a202e1b
Continue moving optional parameters and also create EMC_assert functi…
bHimes Jan 19, 2024
82f5a13
Add parsing function to check and replace deprecated parameter names …
bHimes Jan 19, 2024
76c2191
Added range checks for asserts and change microscope parameters.
bHimes Jan 19, 2024
8f7984a
Remove load tomo parameter
bHimes Jan 19, 2024
6cd5840
Whole pile of parameteres moved
bHimes Jan 19, 2024
3e0e727
basic parsing passes
bHimes Jan 19, 2024
d9ef47d
through basic avg and fsc, single ref align is running
bHimes Jan 19, 2024
8d32303
Align, Avg for classification seem to be working, pca with single ref…
bHimes Jan 19, 2024
a65b243
wip
bHimes Jan 30, 2024
7a7517f
WIP: Basic update to classification working, needs to be parameterized.
bHimes Feb 2, 2024
83f338f
Update to cuda12
bHimes Feb 12, 2024
725839e
Improved options for visualizing tomoCPR results on phakePhasePlate t…
bHimes Feb 12, 2024
81d8fc6
Move mex to static compilation for cuda libs
bHimes Feb 15, 2024
4e3465b
Fixing ctf convention, emClarity will NOT work with overfocus now as …
bHimes Feb 15, 2024
e6ed86b
wip
bHimes Feb 15, 2024
1c408e6
Fix tiling in refine ctf and allow higher resolution at tilt in run c…
bHimes Feb 16, 2024
98f2259
Fix date time and doHelical errors from parameter conversion in templ…
bHimes Feb 16, 2024
fb8b20f
mapBack WIP
bHimes Feb 18, 2024
7ccd09c
Fix indexing problem in substack saving for toCistem
bHimes Feb 18, 2024
6408c15
Sweep transformation fudge factors
bHimes Feb 19, 2024
ac840c3
Change defaults for fudge factors, add emc.print_alignment_stats to d…
bHimes Feb 19, 2024
44a293f
Fix a few neg -> pos defocus oversights in tomoCPR. (Really nead to d…
bHimes Feb 19, 2024
8f77c25
wip
bHimes Feb 21, 2024
a1f5709
Working out some kinks in ctf 3d
bHimes Feb 21, 2024
e79aa84
improve distribution of work in align raw
bHimes Feb 21, 2024
83f8fcb
cleaned up some print garbage
bHimes Feb 21, 2024
48fddc4
working out more kinks, the newstack command is upside down from what…
bHimes Feb 21, 2024
71ea25c
Breaking changes, breaking code, breaking my fast
bHimes Feb 22, 2024
8bb68df
working for init and ctf3d, though the newstack op still is inverted
bHimes Feb 22, 2024
79b0dfb
well
bHimes Feb 22, 2024
91e42c8
There is still something a bit jenky going on, but I'm running throug…
bHimes Feb 23, 2024
554993a
Cleaning a few things up and I think I'm happy with the coordinate tr…
bHimes Feb 23, 2024
5dc961b
wip
bHimes Feb 23, 2024
eed2649
Fix indexing in new check on TS name vs TOMO name in mapBacks
bHimes Feb 23, 2024
b8de363
Changes to make to_cisTEM always use disk not ramdisk to avoid OOM. t…
bHimes Feb 23, 2024
e13bcb1
Fixed local file ommission and reverted matrix definition, but still …
bHimes Feb 23, 2024
4336ae1
hate
bHimes Feb 26, 2024
aba9f0c
wip
bHimes Feb 28, 2024
3430f21
wip
bHimes Feb 28, 2024
42eb940
Added mex function to convert to halfprecision and typecast to a uint…
bHimes Feb 28, 2024
d498fb4
MPS: changed ctf3d to be able to run multiple processes per gpu and …
bHimes Feb 29, 2024
d9c2707
Switch all get volumes to the new OPEN_IMG funciton to handle FP16)
bHimes Feb 29, 2024
c2e6a00
half-precision working from emC segment to emC ctf3d templateSearch
bHimes Feb 29, 2024
81e6437
Little rat fucking matlab - half was not recognized in the compiled c…
bHimes Feb 29, 2024
e2c48aa
Sorted through all the nitty gritty to get slabs to match. Also test …
bHimes Mar 1, 2024
24823e9
Remove even check in small slab movment as this was incorrect, reveal…
bHimes Mar 1, 2024
a8bc339
Set super sample and expand lines to 3 and true by default in paramet…
bHimes Mar 1, 2024
44fea65
wip
bHimes Mar 4, 2024
2821a37
It seems there was no major flaw with correcting the x inversion in c…
bHimes Mar 5, 2024
b0a7c19
center model in rotated frame
bHimes Mar 6, 2024
5090767
also centered in rotated view
bHimes Mar 6, 2024
f53c42c
prj now matches (test case) but there was some opaque failure to repr…
bHimes Mar 6, 2024
3d766a1
Scaling looks right, but the shifts are a bit massive
bHimes Mar 6, 2024
23c956b
Stepping through XCF calc in tomoCPR and there is a clear bug I think…
bHimes Mar 7, 2024
431aede
wip
bHimes Mar 7, 2024
b75fa8b
tomoCPR *feels* like it is going to be sorted. Moved imod transformat…
bHimes Mar 7, 2024
e23aab1
wipo
bHimes Mar 19, 2024
a0cd087
Updates to make pca with random subset work again, set boundary error…
bHimes Mar 22, 2024
e401a3b
WIP adding gpu conversions to and from half
bHimes Mar 22, 2024
e25bbd4
wip fix tracking of mexfiles
bHimes Mar 22, 2024
e395826
Fix non-tracking of mex files
bHimes Mar 22, 2024
83b3a23
other things
bHimes Mar 22, 2024
04906e2
CPU to GPU swap during half cast seems to be working
bHimes Mar 22, 2024
bcb9c96
Fixes bug in ctf update where new xform was used but not saved, turn …
bHimes Mar 24, 2024
991d3a7
broken, but almost re-ordered alignRawv2
bHimes Mar 25, 2024
364d9b0
multi-ref 2 seems to be working weith refactor
bHimes Mar 26, 2024
45317dd
Fix HP output when using colormap
bHimes Mar 26, 2024
b68e74c
With broken refactored alignRaw_v2, weird z-shifts, reverting that fi…
bHimes Jun 17, 2024
33690d3
Keeping the reverted alignRaw. Note tomoCPR is still not running the …
bHimes Jun 18, 2024
ae26c94
Roughed in a very basic prallelization for PCA over scaleSpace or mul…
bHimes Jul 10, 2024
510d5d5
Add a more rigrous check on file validity to catch the case where the…
bHimes Jul 19, 2024
1858b35
I think this fixes the parallel multi ref pca
bHimes Sep 27, 2024
9be8302
Revert pca to single threaded as the results are not correct, and the…
bHimes Sep 30, 2024
3bb5c58
Fix classIdx -> iRef in alignRaw
bHimes Oct 5, 2024
501e199
wip: making eigenvolumes more useful when symmetry contraints are app…
bHimes Jan 20, 2025
1d81d4e
Wip: fixes bug where CTF/sf3d missing in -z presumably related to uin…
bHimes Jan 25, 2025
837c76c
wip: working out a better handedness check
bHimes Feb 28, 2025
2dbb839
allow ctf 3d in parallel and a bunch of other shit including revamped…
bHimes Mar 4, 2025
915f0c5
forgot a debug breakpoint
bHimes Mar 4, 2025
695eaea
swapped order of loop in TM for big speed up
bHimes Mar 4, 2025
92dcb7d
v1.8.2.2 full_enchilada round_1
bHimes Mar 5, 2025
57a0d00
Remove check on duplicates during initialization since this is now do…
bHimes Mar 5, 2025
84a53cf
whole lotta chains in this mutha
bHimes Aug 17, 2025
335a3b7
feat: Implement comprehensive tilt-series asset management and alignm…
bHimes Aug 26, 2025
83c24c4
feat: Implement rubber band selection tool and enhance GUI architecture
bHimes Aug 27, 2025
6b8b15b
feat: Implement CUDA utilities and PaddedArray class with memory mana…
bHimes Sep 3, 2025
638f4a6
feat: Integrate emC auto-alignment with shell script functionality an…
bHimes Sep 3, 2025
4498177
wip
bHimes Sep 3, 2025
97d7fdd
ci: Streamline CI workflows to reduce queue times
bHimes Sep 3, 2025
e72fb7b
ci: Switch to ubuntu-latest for better runner availability
bHimes Sep 3, 2025
88e6c00
ci: Remove unnecessary X11 dependencies for headless testing
bHimes Sep 3, 2025
964e428
Fix Python linting issues
bHimes Sep 3, 2025
f5cbb89
Fix Black formatting for tilt_series_assets.py
bHimes Sep 3, 2025
ff7c230
Complete Black formatting for all Python files
bHimes Sep 3, 2025
53905f0
Fix Black/isort compatibility issues
bHimes Sep 3, 2025
1ac5602
Fix critical flake8 errors blocking CI
bHimes Sep 3, 2025
c3c20c2
Fix critical test import issues - use proper package structure
bHimes Sep 3, 2025
71fe793
Update test_components.py import (WIP)
bHimes Sep 3, 2025
643aafe
Add comprehensive Python .gitignore and context documentation
bHimes Sep 3, 2025
995d13f
Progress on flake8 cleanup - major improvements
bHimes Sep 3, 2025
9a961fe
Continue flake8 cleanup - remove line length restrictions
bHimes Sep 3, 2025
76d53db
working on linting
bHimes Sep 4, 2025
1cac963
Restructure CI workflows for focused granular checks
bHimes Sep 4, 2025
37748e3
Add comprehensive CI status badges
bHimes Sep 4, 2025
9df16e4
wip
bHimes Sep 4, 2025
a0b538d
Add comprehensive YAML comments explaining workflow efficiency
bHimes Sep 4, 2025
3dfc2be
wip
bHimes Sep 4, 2025
9b77a15
test gpu ci
bHimes Sep 4, 2025
a2b0cf4
simplify runs-on
bHimes Sep 4, 2025
69ad2de
fix cupy issue
bHimes Sep 4, 2025
a2af93b
let unit tests fail
bHimes Sep 4, 2025
7d3e579
feat: Enhance CUDA operations with memory layout fixes and diagnostics
bHimes Sep 4, 2025
b2d11aa
feat: Improve emClarity compilation output and error handling
bHimes Sep 18, 2025
5d696b7
fixes for alt_cache
bHimes Sep 18, 2025
28fe3d6
feat: Implement universal metadata wrapper with three-mode system
bHimes Sep 19, 2025
cee84c6
feat: Implement basic metadata wrapper with legacy support
bHimes Sep 19, 2025
889cf30
docs: Add wrapper usage guide
bHimes Sep 19, 2025
71ba6de
feat: Implement metadata wrapper system and improve compilation output
bHimes Sep 19, 2025
b351317
fixes
bHimes Sep 19, 2025
0fe8102
refactor: Major parameter handling and help menu cleanup
bHimes Sep 20, 2025
6c4c101
feat: Comprehensive help message improvements for emClarity commands
bHimes Sep 20, 2025
44883bc
feat: Fix plotFSC command implementation and variable scope issues
bHimes Sep 20, 2025
fb3b5c4
feat: Implement atomic MAT file saves with integrity checking and ret…
bHimes Sep 22, 2025
a6cef0a
fix: Improve error handling and debugging in atomic MAT file saves
bHimes Sep 22, 2025
af6d327
feat: Add comprehensive MAT file corruption protection and safe copy …
bHimes Sep 22, 2025
8bbd600
debug: Add comprehensive verbose debugging to atomic MAT file saves
bHimes Sep 22, 2025
51ffc86
fix: Eliminate MAT file corruption by refactoring metadata I/O archit…
bHimes Sep 22, 2025
1b02e06
wipo
bHimes Sep 22, 2025
4df2a4d
WIP: Implement parallel processing for BH_to_cisTEM_mapBack
bHimes Sep 23, 2025
062fd3f
fix: Resolve 54-particle validation error in BH_to_cisTEM_mapBack
bHimes Sep 25, 2025
f2bc8a9
wip
bHimes Sep 25, 2025
ac2ae86
fix: Remove undefined variable reference from debug output
bHimes Sep 25, 2025
483e5fd
fix: Improve MAT file save reliability and fix mask command parameter…
bHimes Sep 29, 2025
cbf6620
add basics for multislice (no water though or movement)
bHimes Dec 23, 2025
681ebac
wip: Add Y-shift handling and GPU memory optimization for synthetic p…
bHimes Dec 30, 2025
0782c2d
feat: Add in-plane rotation support to synthetic projections
bHimes Dec 30, 2025
7f0cecb
feat: Add emClarity simulate command for synthetic data generation
bHimes Dec 30, 2025
e4de964
wip
bHimes Mar 11, 2026
ae72e4b
feat: Add ADAM-based CTF refinement engine and Pass 2 scaffolding
bHimes Mar 11, 2026
5946325
feat: Add standalone CTF refinement program and simplify cisTEM export
bHimes Mar 11, 2026
ec27dcb
drafted the remainder of the new defocus fitting. Untested b/c matlab…
bHimes Mar 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
94 changes: 94 additions & 0 deletions .github-workflows-example.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# Example GitHub Actions workflow for the new linting setup
# This replaces the old black/isort/flake8/mypy workflow

name: Code Quality

on:
push:
branches: [ main, develop, ctf3d_work ]
pull_request:
branches: [ main, develop ]

jobs:
lint-and-type-check:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.8, 3.9, "3.10", "3.11"]

steps:
- uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install ruff pyright bandit[toml] safety
pip install -e .[dev]

# Fast linting and formatting with Ruff
- name: Lint with Ruff
run: |
# Check for lint issues
ruff check python/ --output-format=github
# Check formatting
ruff format python/ --check

# Static type checking with Pyright
- name: Type check with Pyright
run: pyright python/

# Security linting with Bandit
- name: Security check with Bandit
run: bandit -r python/ -c pyproject.toml -f json -o bandit-report.json
continue-on-error: true

# Dependency vulnerability scanning with Safety
- name: Check dependencies with Safety
run: safety check --json --output safety-report.json
continue-on-error: true

# Upload security reports as artifacts
- name: Upload security reports
uses: actions/upload-artifact@v3
if: always()
with:
name: security-reports-${{ matrix.python-version }}
path: |
bandit-report.json
safety-report.json

# Optional: Run more comprehensive checks occasionally
comprehensive-analysis:
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/main'

steps:
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.11"

- name: Install analysis tools
run: |
python -m pip install --upgrade pip
pip install ruff pyright bandit[toml] safety pylint radon
pip install -e .[dev]

- name: Run comprehensive analysis
run: |
# Ruff with all rules enabled
ruff check python/ --select ALL --ignore D203,D212,PLR0913,PLR2004,T201

# Code complexity analysis
radon cc python/ -a -nc
radon mi python/ -nc

# Deep code quality analysis with Pylint (advisory)
pylint python/ --reports=y --exit-zero || true
222 changes: 222 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
# Copilot Rules

## Project specific goals

- emClarity is an application written in matlab and also uses mex and mexCuda for high-performance computing tasks, particularly in the field of cryo-electron microscopy (cryo-EM).
- The original application is entirely command line driven, and our goal is to build a simple Pyside6 GUI to facilitate user interaction with the underlying functionality.
- The GUI should provide a user-friendly interface for configuring and running cryo-EM data processing workflows.
- As we develop, we want to clean up and simplify code as well as adding tests to ensure functionality and prevent regressions.

## Copilot Behavior

- Copilot should activate and within virtual environment when working with python.
- Copilot should provide concise and relevant code suggestions.
- Copilot should avoid suggesting large blocks of code without context.
- Copilot should prioritize user intent and project context in its suggestions.

## Copilot code preferences

- Copilot should generate code that is idiomatic to the programming language being used.
- Copilot should prefer built-in language features and standard libraries over external dependencies.
- Copilot should aim for simplicity and clarity in its code suggestions.
- Copilot should never hard-code variables and instead place them in a relevant configuration file or environment variable.
- Copilot should strive for consistency in naming conventions and code style, and use descriptive names for variables and functions.
- Copilot should not allow default values or other design patterns that could lead to ambiguity or confusion.
- Copilot should prefer to fail fast and descriptively.

## Special prompts

- If copilot is asked to work on a rb prompt or a rubber band prompt, it should look in /tmp/emclarity_gui_prompts for the most recent prompt generated with the rubber band tool and use the text and context provided for the next set of work.

## Critical Development Rules

- **Never replace real panels/widgets with dummy versions**: Before swapping out any functional panel or widget for a placeholder, stub, or dummy version, always check with the user first. Real functionality should be preserved unless explicitly requested to be removed.

- **Never alter production database**: Never modify the database schema or delete/alter contents of the production database for development purposes. Always work on copies of the database when testing or debugging. Use commands like `cp emclarity_gui_state.db emclarity_gui_state_backup.db` before any database operations.

- **All temporary files must go in /tmp/copilot-test/**: Never create temporary test files, demo data, or experimental files directly in the project directories. Always use `/tmp/copilot-test/` for any temporary files during development and testing. This keeps the project clean and prevents accidental commits of temporary data.

- Start with the simplest solution and if you think you need to be more creative or expand scope, explain why and we can discuss if we proceed.

- Following any major work, like a GUI rubber band prompt, you should check to see if we are satisified, if so create a WIP commit with a short message using git. But only with permission!


## Development Environment Notes

- **Project Location**: `/sa_shared/git/emClarity/`
- **Virtual Environment**: `.venv/` in project root
- **GUI Location**: `gui/` subdirectory
- **Qt Platform**: Use `QT_QPA_PLATFORM=xcb` for stability
- **Branch**: `ctf3d_work`

## emClarity GUI Development - Key Learnings & Best Practices

*Generated from GUI development session on August 26, 2025*

### Key Learnings for Future GUI Development Sessions

#### 1. **Virtual Environment Context Management**

**Problem**: Frequently forgot to activate the virtual environment when testing Python imports or running the GUI, leading to import errors and wasted debugging time.

**Solution Pattern**:
```bash

# Always use this pattern for Python testing in emClarity
cd /sa_shared/git/emClarity && source .venv/bin/activate && cd gui && python -c "..."

# For GUI launches
cd /sa_shared/git/emClarity && source .venv/bin/activate && cd gui && QT_QPA_PLATFORM=xcb python main.py &

# When launching the gui for testing, always launch in rubberband mode that way I can add more context if needed.
source .venv/bin/activate ./gui/run_gui.sh --rubber-band-mode
```

**Impact**: This pattern eliminates 80% of "import not found" errors and ensures consistent testing environment.

---

#### 2. **Incremental GUI Testing with State Cleanup**

**Problem**: Making multiple changes before testing led to complex debugging when things broke. Also, GUI processes would accumulate without proper cleanup.

**Solution Pattern**:
```bash

# Always kill existing GUI processes before launching new ones
pkill -f "python main.py"

# Then launch fresh instance
cd /sa_shared/git/emClarity && source .venv/bin/activate && cd gui && QT_QPA_PLATFORM=xcb python main.py &
```

**Impact**: This approach caught errors early (e.g., the toggle_keep_on_top parameter issue, import errors) and prevented GUI state conflicts.

---

#### 3. **File Context Awareness for Complex Edits**

**Problem**: When making large-scale changes (like the parameter system rewrite), I sometimes lost track of file state and made edits that corrupted files or created inconsistencies.

**Solution Pattern**:
```python

# Before major file restructuring, always read current state
read_file(file_path, start_line=1, end_line=50) # Check current structure

# For complex replacements, verify the exact context
grep_search(pattern, include_pattern=file_path) # Find exact locations

# After major edits, immediately test key functionality
python -c "from module import Class; test_basic_functionality()"
```

**Impact**: This prevented the parameters.py file corruption incident and caught the unit/scaling issues early in development.

#### 4. What Worked Well in a second session:

- Iterative development approach with small, focused changes
- Database design with composite keys for robust copy/paste functionality
- IMOD tool integration with subprocess management and real-time validation
- Python multiprocessing implementation with shared memory and queue communication
- Project-aware state management with tab notification system

---

#### 5. **Session 3 Learnings: Rubber Band Tool & Advanced UI Development**

*Key insights from August 27, 2025 - Rubber Band selection tool and UI refinement session*

**A. Layout Clearing vs Stacked Widget Approach**

**Problem**: Attempted to implement dynamic panel switching by clearing and rebuilding Qt layouts, which caused segmentation faults and loss of widget state.

**Dead End Approach**:
```python
# This approach failed - caused crashes and state loss
def clear_layout(self):
layout = self.layout()
while layout.count():
child = layout.takeAt(0)
child.widget().setParent(None) # Too aggressive
```

**Successful Solution**:
```python
# QStackedWidget approach - preserves widget state
self.stacked_widget = QStackedWidget()
# Create all panels once at startup
self.tilt_series_panel = self.create_tilt_series_alignment_panel()
self.stacked_widget.addWidget(self.tilt_series_panel)
# Switch panels without destroying them
self.stacked_widget.setCurrentWidget(self.tilt_series_panel)
```

**Key Learning**: For complex widget switching, use QStackedWidget to preserve state rather than destroying/recreating layouts.

---

**B. Iterative Problem Solving Pattern**

**Effective Cycle**:
1. Small incremental changes (single button, single UI element)
2. Immediate testing with `./gui/run_gui.sh --rubber-band-mode`
3. Quick verification through rubber band tool analysis
4. Fix issues before proceeding to next change

**Example Success**: Through 3 rubber band prompts, we successfully:
- Fixed title text cutoff (removed constraining CSS)
- Added "Averaging" button and increased font sizes
- Implemented complete Actions panel with dynamic switching

**Impact**: This iterative approach prevented large-scale rollbacks and caught UI issues immediately.

---

**C. Function Key Reliability Issues**

**Problem**: F1 key functionality was unreliable across different environments/terminals.

**Solution Evolution**:
- F1 → F15 → ESC key (for rubber band) + L key (for click logging)
- Simple keys (ESC, L) proved much more reliable than function keys
- Used ESC for toggle (natural "cancel" association)
- Used L for "Logging" (mnemonic association)

**Learning**: Avoid function keys for critical features; prefer simple letter keys with clear mnemonics.

---

**D. Rubber Band Tool as Development Multiplier**

**Breakthrough**: The rubber band tool became a development force multiplier by:
- Generating AI-friendly prompts with precise coordinates
- Moving REQUEST section to top of prompts (eliminated scrolling)
- Enabling rapid UI issue identification and fixes
- Providing structured context for AI assistance

**Workflow Innovation**: "Use rubber band tool to identify issues → Generate prompt → Apply AI-suggested fixes → Test with rubber band tool again"

**Impact**: This created a feedback loop that accelerated UI development significantly.

---

**E. File Organization & Cleanup Best Practices**

**Pattern**: Regular cleanup prevents project bloat:
```bash
# Organize test files
mkdir gui/tests gui/docs
mv test_*.py gui/tests/
mv *_GUIDE.md *_SUMMARY.md gui/docs/

# Remove dead-end files
rm unused_temp_files.py duplicate_new_versions.py

# Check for unused imports before removing
grep -r "import filename" gui/*.py
```

**Learning**: Regular file organization prevents confusion and makes project navigation easier for both human and AI collaborators.

---
Loading
Loading