Follow-up to #1822 / #1814. The chunked VRT read currently duplicates eager-path logic: ComplexSource scale/offset dtype computation (compare _vrt.py:735-745), the integer-sentinel masking branch (eager __init__.py:4033-4064), and the sentinel-cast helper (_vrt_sentinel_for_dtype mirrors _sentinel_for_dtype). Each per-chunk task also re-parses the VRT XML, so an N-chunk read does N+1 XML parses plus N source-path allowlist validations. Refactor into a shared helper and serialise the parsed VRT once into the task graph to remove the duplication and the per-task parse.
Follow-up to #1822 / #1814. The chunked VRT read currently duplicates eager-path logic: ComplexSource scale/offset dtype computation (compare
_vrt.py:735-745), the integer-sentinel masking branch (eager__init__.py:4033-4064), and the sentinel-cast helper (_vrt_sentinel_for_dtypemirrors_sentinel_for_dtype). Each per-chunk task also re-parses the VRT XML, so an N-chunk read does N+1 XML parses plus N source-path allowlist validations. Refactor into a shared helper and serialise the parsed VRT once into the task graph to remove the duplication and the per-task parse.