# zzzymfr/team-project architecture

> Architecture diagram of the GitHub repository zzzymfr/team-project, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/zzzymfr/team-project
- Repository: https://github.com/zzzymfr/team-project

## Overview

Math Lab is a desktop math workspace: users enter or capture handwritten/photo formulas, evaluate them or graph functions, and organize calculations and notes for PDF export. The graph separates UI/adapters, calculation and recognition, and PDF editing/export. README statements establish the advertised capabilities; source-index references and excerpts support only selected internal links, so unsampled subsystem connections are omitted rather than inferred.

Main entry points: [`src/main/java/pdf_editor/adapter/PdfEditorController.java`](https://github.com/zzzymfr/team-project/blob/main/src/main/java/pdf_editor/adapter/PdfEditorController.java) (PDF Editor Controller), [`src/main/java/data_access/VitalMiniFormulaRecognizer.java`](https://github.com/zzzymfr/team-project/blob/main/src/main/java/data_access/VitalMiniFormulaRecognizer.java) (Formula Recognizer), [`src/main/java/entity/node/Node.java`](https://github.com/zzzymfr/team-project/blob/main/src/main/java/entity/node/Node.java) (Expression Nodes), [`src/main/java/view/DrawingCanvas.java`](https://github.com/zzzymfr/team-project/blob/main/src/main/java/view/DrawingCanvas.java) (Drawing Canvas)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop UI"]
  node_canvas["Drawing Canvas<br/>[DrawingCanvas.java]"]
  node_app["App Launcher<br/>[app.java]"]
  node_eval_controller["Evaluate Controller"]
  node_graph_controller["Graph Controller"]
end

subgraph group_math["Math Engine"]
  node_evaluate_interactor["Evaluation Use Case"]
  node_latex_parser["LaTeX Parser<br/>[MathParser.java]"]
  node_expression_tree["Expression Nodes<br/>[Node.java]"]
  node_evaluation_context["Evaluation Context<br/>[Context.java]"]
  node_derivatives["Derivative Calculator"]
  node_symbolic["Symbolic Derivatives"]
end

subgraph group_recognition["Formula Recognition"]
  node_recognize_adapter["Recognition Adapter"]
  node_preprocessor["Image Preprocessor"]
  node_recognizer["Formula Recognizer"]
  node_inference["Inference Device"]
  node_vision_model["Vision Model<br/>[vital_mini.java]"]
  node_training_model["Recognition Model<br/>[model.py]"]
end

subgraph group_graphing["Graphing"]
  node_graph_interactor["Graph Use Case"]
  node_graph_renderer["Graph Renderer"]
end

subgraph group_pdf["PDF Studio"]
  node_pdf_view["PDF Editor View"]
  node_pdf_controller["PDF Editor Controller"]
  node_pdf_document["PDF Document<br/>[PdfDocument.java]"]
  node_document_editor["Document Editor"]
  node_auto_layout["Auto Layout"]
  node_pdf_export["PDF Export"]
  node_pdf_output["PDF Output Adapter"]
end

node_student(("Student"))
node_desmos["Desmos API"]

node_student -->|"writes formulas"| node_canvas
node_student -->|"submits image"| node_recognize_adapter
node_canvas -.->|"requests calculation"| node_eval_controller
node_app -->|"configures"| node_recognizer
node_recognize_adapter -.->|"recognizes formula"| node_recognizer
node_recognizer -.->|"prepares image"| node_preprocessor
node_recognizer -.->|"runs inference"| node_inference
node_inference -.->|"loads model"| node_vision_model
node_training_model -.->|"exports weights"| node_vision_model
node_eval_controller -->|"executes"| node_evaluate_interactor
node_evaluate_interactor -.->|"parses expression"| node_latex_parser
node_latex_parser -->|"builds nodes"| node_expression_tree
node_expression_tree -->|"evaluates in"| node_evaluation_context
node_expression_tree -->|"calculates derivative"| node_derivatives
node_symbolic -->|"uses calculator"| node_derivatives
node_student -->|"enters function"| node_graph_controller
node_graph_controller -->|"submits graph request"| node_graph_interactor
node_graph_interactor -.->|"renders graph"| node_graph_renderer
node_graph_renderer -.->|"requests rendering"| node_desmos
node_student -->|"edits notes"| node_pdf_view
node_pdf_view -->|"sends editor actions"| node_pdf_controller
node_pdf_controller -->|"edits document"| node_document_editor
node_pdf_controller -->|"requests layout"| node_auto_layout
node_pdf_controller -->|"exports snapshot"| node_pdf_export
node_document_editor -.->|"updates model"| node_pdf_document
node_pdf_export -.->|"writes PDF"| node_pdf_output

click node_canvas "https://github.com/zzzymfr/team-project/blob/main/src/main/java/view/DrawingCanvas.java"
click node_app "https://github.com/zzzymfr/team-project/blob/main/src/main/java/app.java"
click node_eval_controller "https://github.com/zzzymfr/team-project/blob/main/src/main/java/interface_adapter/evaluate/EvaluateController.java"
click node_graph_controller "https://github.com/zzzymfr/team-project/blob/main/src/main/java/interface_adapter/graph/GraphController.java"
click node_recognize_adapter "https://github.com/zzzymfr/team-project/blob/main/src/main/java/interface_adapter/recognize/FormulaRecognizer.java"
click node_preprocessor "https://github.com/zzzymfr/team-project/blob/main/src/main/java/data_access/FormulaImagePreprocessor.java"
click node_recognizer "https://github.com/zzzymfr/team-project/blob/main/src/main/java/data_access/VitalMiniFormulaRecognizer.java"
click node_inference "https://github.com/zzzymfr/team-project/blob/main/src/main/java/model/InferenceDevice.java"
click node_vision_model "https://github.com/zzzymfr/team-project/blob/main/src/main/java/model/vital_mini.java"
click node_training_model "https://github.com/zzzymfr/team-project/blob/main/src/neutral%20network/model.py"
click node_evaluate_interactor "https://github.com/zzzymfr/team-project/blob/main/src/main/java/use_case/evaluate/EvaluateInteractor.java"
click node_latex_parser "https://github.com/zzzymfr/team-project/blob/main/src/main/java/entity/MathParser.java"
click node_expression_tree "https://github.com/zzzymfr/team-project/blob/main/src/main/java/entity/node/Node.java"
click node_evaluation_context "https://github.com/zzzymfr/team-project/blob/main/src/main/java/entity/Context.java"
click node_derivatives "https://github.com/zzzymfr/team-project/blob/main/src/main/java/entity/calculus/DerivativeCalculator.java"
click node_symbolic "https://github.com/zzzymfr/team-project/blob/main/src/main/java/entity/symbolic/SymbolicDerivative.java"
click node_graph_interactor "https://github.com/zzzymfr/team-project/blob/main/src/main/java/use_case/graph_function/GraphFunctionInteractor.java"
click node_graph_renderer "https://github.com/zzzymfr/team-project/blob/main/src/main/java/data_access/QuickChartGraphRenderer.java"
click node_pdf_view "https://github.com/zzzymfr/team-project/blob/main/src/main/java/pdf_editor/view/PdfEditorFrame.java"
click node_pdf_controller "https://github.com/zzzymfr/team-project/blob/main/src/main/java/pdf_editor/adapter/PdfEditorController.java"
click node_pdf_document "https://github.com/zzzymfr/team-project/blob/main/src/main/java/pdf_editor/domain/PdfDocument.java"
click node_document_editor "https://github.com/zzzymfr/team-project/blob/main/src/main/java/pdf_editor/use_case/DocumentEditor.java"
click node_auto_layout "https://github.com/zzzymfr/team-project/blob/main/src/main/java/pdf_editor/use_case/AutoLayoutInteractor.java"
click node_pdf_export "https://github.com/zzzymfr/team-project/blob/main/src/main/java/pdf_editor/use_case/PdfExportInteractor.java"
click node_pdf_output "https://github.com/zzzymfr/team-project/blob/main/src/main/java/pdf_editor/data_access/PdfBoxOutputAdapter.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_canvas,node_app,node_eval_controller,node_graph_controller toneBlue
class node_evaluate_interactor,node_latex_parser,node_expression_tree,node_evaluation_context,node_derivatives,node_symbolic toneAmber
class node_recognize_adapter,node_preprocessor,node_recognizer,node_inference,node_vision_model,node_training_model,node_desmos toneMint
class node_graph_interactor,node_graph_renderer toneRose
class node_pdf_view,node_pdf_controller,node_pdf_document,node_document_editor,node_auto_layout,node_pdf_export,node_pdf_output,node_student toneIndigo
```

## Components

### Desktop UI

- [Drawing Canvas](https://github.com/zzzymfr/team-project/blob/main/src/main/java/view/DrawingCanvas.java): `src/main/java/view/DrawingCanvas.java`
- [App Launcher](https://github.com/zzzymfr/team-project/blob/main/src/main/java/app.java): `src/main/java/app.java`
- [Evaluate Controller](https://github.com/zzzymfr/team-project/blob/main/src/main/java/interface_adapter/evaluate/EvaluateController.java): `src/main/java/interface_adapter/evaluate/EvaluateController.java`
- [Graph Controller](https://github.com/zzzymfr/team-project/blob/main/src/main/java/interface_adapter/graph/GraphController.java): `src/main/java/interface_adapter/graph/GraphController.java`

### Math Engine

- [Evaluation Use Case](https://github.com/zzzymfr/team-project/blob/main/src/main/java/use_case/evaluate/EvaluateInteractor.java): `src/main/java/use_case/evaluate/EvaluateInteractor.java`
- [LaTeX Parser](https://github.com/zzzymfr/team-project/blob/main/src/main/java/entity/MathParser.java): `src/main/java/entity/MathParser.java`
- [Expression Nodes](https://github.com/zzzymfr/team-project/blob/main/src/main/java/entity/node/Node.java): `src/main/java/entity/node/Node.java`
- [Evaluation Context](https://github.com/zzzymfr/team-project/blob/main/src/main/java/entity/Context.java): `src/main/java/entity/Context.java`
- [Derivative Calculator](https://github.com/zzzymfr/team-project/blob/main/src/main/java/entity/calculus/DerivativeCalculator.java): `src/main/java/entity/calculus/DerivativeCalculator.java`
- [Symbolic Derivatives](https://github.com/zzzymfr/team-project/blob/main/src/main/java/entity/symbolic/SymbolicDerivative.java): `src/main/java/entity/symbolic/SymbolicDerivative.java`

### Formula Recognition

- [Recognition Adapter](https://github.com/zzzymfr/team-project/blob/main/src/main/java/interface_adapter/recognize/FormulaRecognizer.java): `src/main/java/interface_adapter/recognize/FormulaRecognizer.java`
- [Image Preprocessor](https://github.com/zzzymfr/team-project/blob/main/src/main/java/data_access/FormulaImagePreprocessor.java): `src/main/java/data_access/FormulaImagePreprocessor.java`
- [Formula Recognizer](https://github.com/zzzymfr/team-project/blob/main/src/main/java/data_access/VitalMiniFormulaRecognizer.java): `src/main/java/data_access/VitalMiniFormulaRecognizer.java`
- [Inference Device](https://github.com/zzzymfr/team-project/blob/main/src/main/java/model/InferenceDevice.java): `src/main/java/model/InferenceDevice.java`
- [Vision Model](https://github.com/zzzymfr/team-project/blob/main/src/main/java/model/vital_mini.java): `src/main/java/model/vital_mini.java`
- [Recognition Model](https://github.com/zzzymfr/team-project/blob/main/src/neutral%20network/model.py): `src/neutral network/model.py`

### Graphing

- [Graph Use Case](https://github.com/zzzymfr/team-project/blob/main/src/main/java/use_case/graph_function/GraphFunctionInteractor.java): `src/main/java/use_case/graph_function/GraphFunctionInteractor.java`
- [Graph Renderer](https://github.com/zzzymfr/team-project/blob/main/src/main/java/data_access/QuickChartGraphRenderer.java): `src/main/java/data_access/QuickChartGraphRenderer.java`

### PDF Studio

- [PDF Editor View](https://github.com/zzzymfr/team-project/blob/main/src/main/java/pdf_editor/view/PdfEditorFrame.java): `src/main/java/pdf_editor/view/PdfEditorFrame.java`
- [PDF Editor Controller](https://github.com/zzzymfr/team-project/blob/main/src/main/java/pdf_editor/adapter/PdfEditorController.java): `src/main/java/pdf_editor/adapter/PdfEditorController.java`
- [PDF Document](https://github.com/zzzymfr/team-project/blob/main/src/main/java/pdf_editor/domain/PdfDocument.java): `src/main/java/pdf_editor/domain/PdfDocument.java`
- [Document Editor](https://github.com/zzzymfr/team-project/blob/main/src/main/java/pdf_editor/use_case/DocumentEditor.java): `src/main/java/pdf_editor/use_case/DocumentEditor.java`
- [Auto Layout](https://github.com/zzzymfr/team-project/blob/main/src/main/java/pdf_editor/use_case/AutoLayoutInteractor.java): `src/main/java/pdf_editor/use_case/AutoLayoutInteractor.java`
- [PDF Export](https://github.com/zzzymfr/team-project/blob/main/src/main/java/pdf_editor/use_case/PdfExportInteractor.java): `src/main/java/pdf_editor/use_case/PdfExportInteractor.java`
- [PDF Output Adapter](https://github.com/zzzymfr/team-project/blob/main/src/main/java/pdf_editor/data_access/PdfBoxOutputAdapter.java): `src/main/java/pdf_editor/data_access/PdfBoxOutputAdapter.java`

### Other components

- **Student**
- **Desmos API**

## Connections

- Student → Drawing Canvas: writes formulas
- Student → Recognition Adapter: submits image
- Drawing Canvas → Evaluate Controller: requests calculation
- App Launcher → Formula Recognizer: configures (evidence: `src/main/java/app.java`)
- Recognition Adapter → Formula Recognizer: recognizes formula
- Formula Recognizer → Image Preprocessor: prepares image
- Formula Recognizer → Inference Device: runs inference
- Inference Device → Vision Model: loads model
- Recognition Model → Vision Model: exports weights
- Evaluate Controller → Evaluation Use Case: executes (evidence: `src/main/java/interface_adapter/evaluate/EvaluateController.java`)
- Evaluation Use Case → LaTeX Parser: parses expression
- LaTeX Parser → Expression Nodes: builds nodes (evidence: `src/main/java/entity/MathParser.java`)
- Expression Nodes → Evaluation Context: evaluates in (evidence: `src/main/java/entity/node/Node.java`)
- Expression Nodes → Derivative Calculator: calculates derivative (evidence: `src/main/java/entity/node/DerivativeNode.java`)
- Symbolic Derivatives → Derivative Calculator: uses calculator (evidence: `src/main/java/entity/symbolic/SymbolicDerivative.java`)
- Student → Graph Controller: enters function
- Graph Controller → Graph Use Case: submits graph request (evidence: `src/main/java/interface_adapter/graph/GraphController.java`)
- Graph Use Case → Graph Renderer: renders graph
- Graph Renderer → Desmos API: requests rendering
- Student → PDF Editor View: edits notes
- PDF Editor View → PDF Editor Controller: sends editor actions (evidence: `src/main/java/pdf_editor/view/PdfEditorFrame.java`)
- PDF Editor Controller → Document Editor: edits document (evidence: `src/main/java/pdf_editor/adapter/PdfEditorController.java`)
- PDF Editor Controller → Auto Layout: requests layout (evidence: `src/main/java/pdf_editor/adapter/PdfEditorController.java`)
- PDF Editor Controller → PDF Export: exports snapshot (evidence: `src/main/java/pdf_editor/adapter/PdfEditorController.java`)
- Document Editor → PDF Document: updates model
- PDF Export → PDF Output Adapter: writes PDF
