ESFEX v0.1.6
Grid Builder reliability, completeness, and country-scale performance.
⚡ Performance
- "Building network" no longer hangs on country-scale regions. Four independent O(n²) hot paths in the build pipeline are now linear: bus snapping (over-wide candidate window), disconnected-component bridging and equipment chaining (linear nearest-bus scans → projected KD-tree), line removal (per-fix list rebuild → batched), and per-edge bridge detection in electrical-parameter inference (a BFS per edge → a single iterative Tarjan pass). A ~25k-feature import (e.g. Japan) that previously hung for 20+ minutes now completes in seconds.
✨ Added
- Demand visualizer — a reusable Plotly demand chart (Grid Builder and node panel) with a date x-axis that auto-scales on zoom, a red mean line, and a deep "Demand statistics" panel.
- Complete, functional built networks — generators are assigned a fuel and a technology from a powerplantmatching-style taxonomy (CCGT/OCGT, steam and combustion engines, run-of-river/reservoir/pumped hydro, PV, on/offshore wind), lines get capacities and impedances from a standard line-type catalog (PyPSA-style r/x/c per km with an N-1 derate), and nodes are filled with default operating reserves and transmission losses. No more orphan generators without a fuel or technology.
- Per-phase build timing — the Grid Builder result panel now reports a "Timing" breakdown (seconds per build phase).
🔧 Changed
- Fuel Entry Point and Fuel Source unified into a single "Fuel Source" concept across the model and the Studio GUI.
🐛 Fixed
- OSM fetch timeout on large regions — large Overpass queries (e.g. Japan) are tiled into sub-requests instead of failing on a single monolithic query, and wrapped longitudes are normalized so the WRI/GEM/GridFinder layers return data across the ±180° meridian.
- "Naming nodes" hang — the node-naming step is time-boxed and the subsequent rendering no longer freezes the UI after large-region builds.
- "Lines toward a centroid" after a rebuild — the node-assignment spatial index cached on the centroid count, so a rebuild with re-clustered centroids of the same count reused a stale tree and collapsed the network toward the wrong centroids. It is now keyed on centroid content with a projected metric and exact-haversine refinement.
- Map zoom-out and world wrapping — the Grid Builder map is constrained to a single copy of the world: no zooming out below 1× world size and no panning onto wrapped copies of the globe (which produced out-of-range longitudes).
- OTEC cycle diagrams across NumPy/SciPy versions — thermodynamic state values are coerced to plain floats so the T-s / P-h loop arrays stay homogeneous and
mass_flowis always a float, regardless of the installed NumPy/CoolProp build.
Full changelog: v0.1.5...v0.1.6