# johnnyengineer/realoptions architecture

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

- Interactive diagram: https://gitdiagram.com/johnnyengineer/realoptions
- Repository: https://github.com/johnnyengineer/realoptions

## Overview

RealOptions is a desktop application for real-options and option valuation. Users choose an analysis from the Tkinter menu, enter project or option inputs, and receive calculated values and, for binomial analyses, plotted trees. The excerpts show volatility estimation, abandonment, expansion, contraction, compound and dynamic-strike options, plus Black–Scholes–Merton valuation. The menu also advertises Monte Carlo value simulation, but its implementation and wiring are not visible in the sampled source.

Main entry points: [`RealOptions/App.py`](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py) (App navigation), [`RealOptions/Functions.py`](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py) (Tree plotting)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop interface"]
  node_app["App navigation<br/>[App.py]"]
  node_abandonment["Abandonment inputs<br/>[App.py]"]
  node_expansion["Expansion inputs<br/>[App.py]"]
  node_contraction["Contraction inputs<br/>[App.py]"]
  node_compound["Compound inputs<br/>[App.py]"]
  node_dynamic["Dynamic-strike inputs<br/>[App.py]"]
  node_volatility["Cashflow volatility<br/>[App.py]"]
  node_bsm_ui["BSM inputs<br/>[App.py]"]
end

subgraph group_valuation["Valuation methods"]
  node_montecarlo["Monte Carlo values<br/>[Functions.py]"]
  node_binomial_abandonment["Abandonment model<br/>[Functions.py]"]
  node_binomial_expansion["Expansion model<br/>[Functions.py]"]
  node_binomial_contraction["Contraction model<br/>[Functions.py]"]
  node_binomial_compound["Compound model<br/>[Functions.py]"]
  node_binomial_dynamic["Dynamic-strike model<br/>[Functions.py]"]
  node_bsm["BSM valuation<br/>[Functions.py]"]
  node_vol_calc["Volatility calculation<br/>[Functions.py]"]
end

subgraph group_results["Results display"]
  node_tree_plot["Tree plotting<br/>[Functions.py]"]
  node_result_dialog["Result dialogs<br/>[App.py]"]
end

node_user(("User"))

node_user -->|"opens"| node_app
node_app -->|"selects"| node_abandonment
node_app -->|"selects"| node_expansion
node_app -->|"selects"| node_contraction
node_app -->|"selects"| node_compound
node_app -->|"selects"| node_dynamic
node_app -->|"selects"| node_volatility
node_app -->|"selects"| node_bsm_ui
node_abandonment -->|"calls"| node_binomial_abandonment
node_expansion -->|"calls"| node_binomial_expansion
node_contraction -->|"calls"| node_binomial_contraction
node_compound -->|"calls"| node_binomial_compound
node_dynamic -->|"calls"| node_binomial_dynamic
node_bsm_ui -->|"calls"| node_bsm
node_volatility -->|"calls"| node_vol_calc
node_binomial_abandonment -->|"plots trees"| node_tree_plot
node_binomial_expansion -->|"plots trees"| node_tree_plot
node_binomial_contraction -->|"plots trees"| node_tree_plot
node_binomial_compound -->|"plots trees"| node_tree_plot
node_binomial_dynamic -->|"plots trees"| node_tree_plot
node_bsm_ui -->|"shows prices"| node_result_dialog
node_volatility -->|"shows estimate"| node_result_dialog

click node_app "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py"
click node_abandonment "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py"
click node_expansion "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py"
click node_contraction "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py"
click node_compound "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py"
click node_dynamic "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py"
click node_volatility "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py"
click node_bsm_ui "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py"
click node_montecarlo "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py"
click node_binomial_abandonment "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py"
click node_binomial_expansion "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py"
click node_binomial_contraction "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py"
click node_binomial_compound "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py"
click node_binomial_dynamic "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py"
click node_bsm "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py"
click node_vol_calc "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py"
click node_tree_plot "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py"
click node_result_dialog "https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py"

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_app,node_abandonment,node_expansion,node_contraction,node_compound,node_dynamic,node_volatility,node_bsm_ui,node_user toneBlue
class node_montecarlo,node_binomial_abandonment,node_binomial_expansion,node_binomial_contraction,node_binomial_compound,node_binomial_dynamic,node_bsm,node_vol_calc toneAmber
class node_tree_plot,node_result_dialog toneMint
```

## Components

### Desktop interface

- [App navigation](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py): `RealOptions/App.py`
- [Abandonment inputs](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py): `RealOptions/App.py`
- [Expansion inputs](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py): `RealOptions/App.py`
- [Contraction inputs](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py): `RealOptions/App.py`
- [Compound inputs](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py): `RealOptions/App.py`
- [Dynamic-strike inputs](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py): `RealOptions/App.py`
- [Cashflow volatility](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py): `RealOptions/App.py`
- [BSM inputs](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py): `RealOptions/App.py`

### Valuation methods

- [Monte Carlo values](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py): `RealOptions/Functions.py`
- [Abandonment model](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py): `RealOptions/Functions.py`
- [Expansion model](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py): `RealOptions/Functions.py`
- [Contraction model](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py): `RealOptions/Functions.py`
- [Compound model](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py): `RealOptions/Functions.py`
- [Dynamic-strike model](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py): `RealOptions/Functions.py`
- [BSM valuation](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py): `RealOptions/Functions.py`
- [Volatility calculation](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py): `RealOptions/Functions.py`

### Results display

- [Tree plotting](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/Functions.py): `RealOptions/Functions.py`
- [Result dialogs](https://github.com/johnnyengineer/realoptions/blob/main/RealOptions/App.py): `RealOptions/App.py`

### Other components

- **User**

## Connections

- User → App navigation: opens
- App navigation → Abandonment inputs: selects
- App navigation → Expansion inputs: selects
- App navigation → Contraction inputs: selects
- App navigation → Compound inputs: selects
- App navigation → Dynamic-strike inputs: selects
- App navigation → Cashflow volatility: selects
- App navigation → BSM inputs: selects
- Abandonment inputs → Abandonment model: calls
- Expansion inputs → Expansion model: calls
- Contraction inputs → Contraction model: calls
- Compound inputs → Compound model: calls
- Dynamic-strike inputs → Dynamic-strike model: calls
- BSM inputs → BSM valuation: calls
- Cashflow volatility → Volatility calculation: calls
- Abandonment model → Tree plotting: plots trees
- Expansion model → Tree plotting: plots trees
- Contraction model → Tree plotting: plots trees
- Compound model → Tree plotting: plots trees
- Dynamic-strike model → Tree plotting: plots trees
- BSM inputs → Result dialogs: shows prices
- Cashflow volatility → Result dialogs: shows estimate
