refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec - #741

Merged
timtreis merged 3 commits into
mainfrom
refactor/issue-716-type-check-params
Jun 22, 2026
Merged

refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec#741
timtreis merged 3 commits into
mainfrom
refactor/issue-716-type-check-params

Conversation

@timtreis

@timtreistimtreis commented Jun 22, 2026

Copy link
Copy Markdown
Member

Closes#716. Decomposes the relocated mega-functions, one commit per function for bisectability.

Commits

  1. _type_check_params (_validate.py, 372 lines / CCN≈164) → 19 module-private _check_* helpers + a flat ordered orchestrator (CCN≈1). Behavior-preserving: call order (first-raised error) and all param_dict mutations identical. contour_px keeps its split type/range checks at their original positions; the interleaved cmap/palette/groups region stays one element_type-aware helper. Verified: 370-case old-vs-main differential, 0 mismatches; new test_type_check_params_preserves_validation_order.
  2. _convert_shapes (_geometry.py) → hoisted the stateless circle→hex/square/circle converters to module level and deduped the copy-pasted convex-hull into one _enclosing_circle. Verified: byte-identical geometry output across circles/polygons/multipolygons × circle/hex/visium_hex/square.
  3. _set_color_source_vec (_color.py, 236 lines / CCN≈48 → 171 / CCN≈29) → extracted _resolve_color_origins, _fetch_color_source_vector, _resolve_color_table (the categorical-mapping + output assembly stay inline). Verified: byte-identical (source_vector, color_vector, categorical) over 160 cases (element × color-column × palette × groups × render_type).

Not done (deliberately)

_get_collection_shape — the issue listed it (CCN 39), but #699 has since shrunk it to 65 lines / CCN≈17, below the decomposition bar. Left as-is.

Verification

Full non-visual suite 510 passed on each step. The two rendering-output functions (_convert_shapes, _set_color_source_vec) are additionally locked by the differential harnesses above; final visual sign-off is CI baselines.

@timtreistimtreis changed the title refactor(validate): decompose _type_check_params into per-parameter helpers (#716)refactor(validate): decompose _type_check_params into per-parameter helpersJun 22, 2026
…elpers (#716)
Split the 372-line, CCN~164 _type_check_params into 19 module-private
_check_* helpers, each validating one parameter group in place; the function
is now a flat ordered sequence of calls. Behavior-preserving: the call order
(hence the first-raised error for any input) and all param_dict mutations are
identical. Verified by a 370-case old-vs-new differential (0 mismatches) and
the full non-visual suite (510 passed).
Notable: contour_px keeps two checks at their original positions (type before
color, range after outline) and _check_contour_px_range re-fetches contour_px
from param_dict; the interleaved cmap/palette/groups region stays one helper.
Adds a direct order-preservation test (color before contour_px range).
@timtreis
timtreisforce-pushed the refactor/issue-716-type-check-params branch from 1e2f8ab to fbfa9b4CompareJune 22, 2026 10:46
…#716)
Hoist the stateless circle->hexagon/square/circle converters to module level and
dedup the copy-pasted convex-hull enclosing-circle computation into a single
_enclosing_circle helper (was duplicated across the polygon and multipolygon
paths). _convert_shapes keeps only the closures that bind max_extent / the
warn_shape_size flag. Behavior-preserving: verified byte-identical geometry
output (old vs new) across circles/polygons/multipolygons x circle/hex/visium_hex/square.
@codecov-commenter

codecov-commenter commented Jun 22, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 84.21053% with 15 lines in your changes missing coverage. Please review.
✅ Project coverage is 79.59%. Comparing base (e454700) to head (6bf751c).

Files with missing linesPatch %Lines
src/spatialdata_plot/pl/_color.py57.57%10 Missing and 4 partials ⚠️
src/spatialdata_plot/pl/_geometry.py95.45%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #741 +/- ##
==========================================
+ Coverage 79.31% 79.59% +0.27% 
==========================================
Files 17 17 Lines 4603 4641 +38 Branches 1030 1029 -1 ==========================================
+ Hits 3651 3694 +43 + Misses 602 598 -4 + Partials 350 349 -1 
Files with missing linesCoverage Δ
src/spatialdata_plot/pl/_validate.py70.67% <100.00%> (+2.10%)⬆️
src/spatialdata_plot/pl/_geometry.py79.53% <95.45%> (-0.65%)⬇️
src/spatialdata_plot/pl/_color.py69.76% <57.57%> (+0.45%)⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@timtreistimtreis changed the title refactor(validate): decompose _type_check_params into per-parameter helpersrefactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec (#716)Jun 22, 2026
…ource_vec (#716)
Pull the three self-contained decision blocks out of the 236-line color resolver:
_resolve_color_origins (locate + df/table shadowing + multi-origin error),
_fetch_color_source_vector (direct-read fast path vs whole-table join), and
_resolve_color_table (which table supplies .uns colors). _set_color_source_vec
drops 236->171 lines (CCN ~48->~29); the categorical-mapping and output assembly
stay inline. Behavior-preserving: verified byte-identical (source_vector,
color_vector, categorical) output over 160 cases (element x color-column x palette
x groups x render_type); full non-visual suite green (510 passed).
@timtreis
timtreisforce-pushed the refactor/issue-716-type-check-params branch from 2ef6a86 to 6bf751cCompareJune 22, 2026 11:07
@timtreistimtreis changed the title refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec (#716)refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vecJun 22, 2026
@timtreis
timtreis merged commit 50a6606 into mainJun 22, 2026
7 of 8 checks passed
@timtreis
timtreis deleted the refactor/issue-716-type-check-params branch June 22, 2026 11:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor: decompose the 4 relocated mega-functions (_type_check_params, _set_color_source_vec, _get_collection_shape, _convert_shapes)

2 participants

@timtreis@codecov-commenter
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec - #741

Merged
timtreis merged 3 commits into
mainfrom
refactor/issue-716-type-check-params
Jun 22, 2026
Merged

refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec#741
timtreis merged 3 commits into
mainfrom
refactor/issue-716-type-check-params

Conversation

@timtreis

@timtreistimtreis commented Jun 22, 2026

Copy link
Copy Markdown
Member

Closes#716. Decomposes the relocated mega-functions, one commit per function for bisectability.

Commits

  1. _type_check_params (_validate.py, 372 lines / CCN≈164) → 19 module-private _check_* helpers + a flat ordered orchestrator (CCN≈1). Behavior-preserving: call order (first-raised error) and all param_dict mutations identical. contour_px keeps its split type/range checks at their original positions; the interleaved cmap/palette/groups region stays one element_type-aware helper. Verified: 370-case old-vs-main differential, 0 mismatches; new test_type_check_params_preserves_validation_order.
  2. _convert_shapes (_geometry.py) → hoisted the stateless circle→hex/square/circle converters to module level and deduped the copy-pasted convex-hull into one _enclosing_circle. Verified: byte-identical geometry output across circles/polygons/multipolygons × circle/hex/visium_hex/square.
  3. _set_color_source_vec (_color.py, 236 lines / CCN≈48 → 171 / CCN≈29) → extracted _resolve_color_origins, _fetch_color_source_vector, _resolve_color_table (the categorical-mapping + output assembly stay inline). Verified: byte-identical (source_vector, color_vector, categorical) over 160 cases (element × color-column × palette × groups × render_type).

Not done (deliberately)

_get_collection_shape — the issue listed it (CCN 39), but #699 has since shrunk it to 65 lines / CCN≈17, below the decomposition bar. Left as-is.

Verification

Full non-visual suite 510 passed on each step. The two rendering-output functions (_convert_shapes, _set_color_source_vec) are additionally locked by the differential harnesses above; final visual sign-off is CI baselines.

@timtreistimtreis changed the title refactor(validate): decompose _type_check_params into per-parameter helpers (#716)refactor(validate): decompose _type_check_params into per-parameter helpersJun 22, 2026
…elpers (#716)
Split the 372-line, CCN~164 _type_check_params into 19 module-private
_check_* helpers, each validating one parameter group in place; the function
is now a flat ordered sequence of calls. Behavior-preserving: the call order
(hence the first-raised error for any input) and all param_dict mutations are
identical. Verified by a 370-case old-vs-new differential (0 mismatches) and
the full non-visual suite (510 passed).
Notable: contour_px keeps two checks at their original positions (type before
color, range after outline) and _check_contour_px_range re-fetches contour_px
from param_dict; the interleaved cmap/palette/groups region stays one helper.
Adds a direct order-preservation test (color before contour_px range).
@timtreis
timtreisforce-pushed the refactor/issue-716-type-check-params branch from 1e2f8ab to fbfa9b4CompareJune 22, 2026 10:46
…#716)
Hoist the stateless circle->hexagon/square/circle converters to module level and
dedup the copy-pasted convex-hull enclosing-circle computation into a single
_enclosing_circle helper (was duplicated across the polygon and multipolygon
paths). _convert_shapes keeps only the closures that bind max_extent / the
warn_shape_size flag. Behavior-preserving: verified byte-identical geometry
output (old vs new) across circles/polygons/multipolygons x circle/hex/visium_hex/square.
@codecov-commenter

codecov-commenter commented Jun 22, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 84.21053% with 15 lines in your changes missing coverage. Please review.
✅ Project coverage is 79.59%. Comparing base (e454700) to head (6bf751c).

Files with missing linesPatch %Lines
src/spatialdata_plot/pl/_color.py57.57%10 Missing and 4 partials ⚠️
src/spatialdata_plot/pl/_geometry.py95.45%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #741 +/- ##
==========================================
+ Coverage 79.31% 79.59% +0.27% 
==========================================
Files 17 17 Lines 4603 4641 +38 Branches 1030 1029 -1 ==========================================
+ Hits 3651 3694 +43 + Misses 602 598 -4 + Partials 350 349 -1 
Files with missing linesCoverage Δ
src/spatialdata_plot/pl/_validate.py70.67% <100.00%> (+2.10%)⬆️
src/spatialdata_plot/pl/_geometry.py79.53% <95.45%> (-0.65%)⬇️
src/spatialdata_plot/pl/_color.py69.76% <57.57%> (+0.45%)⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@timtreistimtreis changed the title refactor(validate): decompose _type_check_params into per-parameter helpersrefactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec (#716)Jun 22, 2026
…ource_vec (#716)
Pull the three self-contained decision blocks out of the 236-line color resolver:
_resolve_color_origins (locate + df/table shadowing + multi-origin error),
_fetch_color_source_vector (direct-read fast path vs whole-table join), and
_resolve_color_table (which table supplies .uns colors). _set_color_source_vec
drops 236->171 lines (CCN ~48->~29); the categorical-mapping and output assembly
stay inline. Behavior-preserving: verified byte-identical (source_vector,
color_vector, categorical) output over 160 cases (element x color-column x palette
x groups x render_type); full non-visual suite green (510 passed).
@timtreis
timtreisforce-pushed the refactor/issue-716-type-check-params branch from 2ef6a86 to 6bf751cCompareJune 22, 2026 11:07
@timtreistimtreis changed the title refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec (#716)refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vecJun 22, 2026
@timtreis
timtreis merged commit 50a6606 into mainJun 22, 2026
7 of 8 checks passed
@timtreis
timtreis deleted the refactor/issue-716-type-check-params branch June 22, 2026 11:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor: decompose the 4 relocated mega-functions (_type_check_params, _set_color_source_vec, _get_collection_shape, _convert_shapes)

2 participants

@timtreis@codecov-commenter
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec - #741

Merged
timtreis merged 3 commits into
mainfrom
refactor/issue-716-type-check-params
Jun 22, 2026
Merged

refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec#741
timtreis merged 3 commits into
mainfrom
refactor/issue-716-type-check-params

Conversation

@timtreis

@timtreistimtreis commented Jun 22, 2026

Copy link
Copy Markdown
Member

Closes#716. Decomposes the relocated mega-functions, one commit per function for bisectability.

Commits

  1. _type_check_params (_validate.py, 372 lines / CCN≈164) → 19 module-private _check_* helpers + a flat ordered orchestrator (CCN≈1). Behavior-preserving: call order (first-raised error) and all param_dict mutations identical. contour_px keeps its split type/range checks at their original positions; the interleaved cmap/palette/groups region stays one element_type-aware helper. Verified: 370-case old-vs-main differential, 0 mismatches; new test_type_check_params_preserves_validation_order.
  2. _convert_shapes (_geometry.py) → hoisted the stateless circle→hex/square/circle converters to module level and deduped the copy-pasted convex-hull into one _enclosing_circle. Verified: byte-identical geometry output across circles/polygons/multipolygons × circle/hex/visium_hex/square.
  3. _set_color_source_vec (_color.py, 236 lines / CCN≈48 → 171 / CCN≈29) → extracted _resolve_color_origins, _fetch_color_source_vector, _resolve_color_table (the categorical-mapping + output assembly stay inline). Verified: byte-identical (source_vector, color_vector, categorical) over 160 cases (element × color-column × palette × groups × render_type).

Not done (deliberately)

_get_collection_shape — the issue listed it (CCN 39), but #699 has since shrunk it to 65 lines / CCN≈17, below the decomposition bar. Left as-is.

Verification

Full non-visual suite 510 passed on each step. The two rendering-output functions (_convert_shapes, _set_color_source_vec) are additionally locked by the differential harnesses above; final visual sign-off is CI baselines.

@timtreistimtreis changed the title refactor(validate): decompose _type_check_params into per-parameter helpers (#716)refactor(validate): decompose _type_check_params into per-parameter helpersJun 22, 2026
…elpers (#716)
Split the 372-line, CCN~164 _type_check_params into 19 module-private
_check_* helpers, each validating one parameter group in place; the function
is now a flat ordered sequence of calls. Behavior-preserving: the call order
(hence the first-raised error for any input) and all param_dict mutations are
identical. Verified by a 370-case old-vs-new differential (0 mismatches) and
the full non-visual suite (510 passed).
Notable: contour_px keeps two checks at their original positions (type before
color, range after outline) and _check_contour_px_range re-fetches contour_px
from param_dict; the interleaved cmap/palette/groups region stays one helper.
Adds a direct order-preservation test (color before contour_px range).
@timtreis
timtreisforce-pushed the refactor/issue-716-type-check-params branch from 1e2f8ab to fbfa9b4CompareJune 22, 2026 10:46
…#716)
Hoist the stateless circle->hexagon/square/circle converters to module level and
dedup the copy-pasted convex-hull enclosing-circle computation into a single
_enclosing_circle helper (was duplicated across the polygon and multipolygon
paths). _convert_shapes keeps only the closures that bind max_extent / the
warn_shape_size flag. Behavior-preserving: verified byte-identical geometry
output (old vs new) across circles/polygons/multipolygons x circle/hex/visium_hex/square.
@codecov-commenter

codecov-commenter commented Jun 22, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 84.21053% with 15 lines in your changes missing coverage. Please review.
✅ Project coverage is 79.59%. Comparing base (e454700) to head (6bf751c).

Files with missing linesPatch %Lines
src/spatialdata_plot/pl/_color.py57.57%10 Missing and 4 partials ⚠️
src/spatialdata_plot/pl/_geometry.py95.45%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #741 +/- ##
==========================================
+ Coverage 79.31% 79.59% +0.27% 
==========================================
Files 17 17 Lines 4603 4641 +38 Branches 1030 1029 -1 ==========================================
+ Hits 3651 3694 +43 + Misses 602 598 -4 + Partials 350 349 -1 
Files with missing linesCoverage Δ
src/spatialdata_plot/pl/_validate.py70.67% <100.00%> (+2.10%)⬆️
src/spatialdata_plot/pl/_geometry.py79.53% <95.45%> (-0.65%)⬇️
src/spatialdata_plot/pl/_color.py69.76% <57.57%> (+0.45%)⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@timtreistimtreis changed the title refactor(validate): decompose _type_check_params into per-parameter helpersrefactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec (#716)Jun 22, 2026
…ource_vec (#716)
Pull the three self-contained decision blocks out of the 236-line color resolver:
_resolve_color_origins (locate + df/table shadowing + multi-origin error),
_fetch_color_source_vector (direct-read fast path vs whole-table join), and
_resolve_color_table (which table supplies .uns colors). _set_color_source_vec
drops 236->171 lines (CCN ~48->~29); the categorical-mapping and output assembly
stay inline. Behavior-preserving: verified byte-identical (source_vector,
color_vector, categorical) output over 160 cases (element x color-column x palette
x groups x render_type); full non-visual suite green (510 passed).
@timtreis
timtreisforce-pushed the refactor/issue-716-type-check-params branch from 2ef6a86 to 6bf751cCompareJune 22, 2026 11:07
@timtreistimtreis changed the title refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec (#716)refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vecJun 22, 2026
@timtreis
timtreis merged commit 50a6606 into mainJun 22, 2026
7 of 8 checks passed
@timtreis
timtreis deleted the refactor/issue-716-type-check-params branch June 22, 2026 11:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor: decompose the 4 relocated mega-functions (_type_check_params, _set_color_source_vec, _get_collection_shape, _convert_shapes)

2 participants

@timtreis@codecov-commenter
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec - #741

Merged
timtreis merged 3 commits into
mainfrom
refactor/issue-716-type-check-params
Jun 22, 2026
Merged

refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec#741
timtreis merged 3 commits into
mainfrom
refactor/issue-716-type-check-params

Conversation

@timtreis

@timtreistimtreis commented Jun 22, 2026

Copy link
Copy Markdown
Member

Closes#716. Decomposes the relocated mega-functions, one commit per function for bisectability.

Commits

  1. _type_check_params (_validate.py, 372 lines / CCN≈164) → 19 module-private _check_* helpers + a flat ordered orchestrator (CCN≈1). Behavior-preserving: call order (first-raised error) and all param_dict mutations identical. contour_px keeps its split type/range checks at their original positions; the interleaved cmap/palette/groups region stays one element_type-aware helper. Verified: 370-case old-vs-main differential, 0 mismatches; new test_type_check_params_preserves_validation_order.
  2. _convert_shapes (_geometry.py) → hoisted the stateless circle→hex/square/circle converters to module level and deduped the copy-pasted convex-hull into one _enclosing_circle. Verified: byte-identical geometry output across circles/polygons/multipolygons × circle/hex/visium_hex/square.
  3. _set_color_source_vec (_color.py, 236 lines / CCN≈48 → 171 / CCN≈29) → extracted _resolve_color_origins, _fetch_color_source_vector, _resolve_color_table (the categorical-mapping + output assembly stay inline). Verified: byte-identical (source_vector, color_vector, categorical) over 160 cases (element × color-column × palette × groups × render_type).

Not done (deliberately)

_get_collection_shape — the issue listed it (CCN 39), but #699 has since shrunk it to 65 lines / CCN≈17, below the decomposition bar. Left as-is.

Verification

Full non-visual suite 510 passed on each step. The two rendering-output functions (_convert_shapes, _set_color_source_vec) are additionally locked by the differential harnesses above; final visual sign-off is CI baselines.

@timtreistimtreis changed the title refactor(validate): decompose _type_check_params into per-parameter helpers (#716)refactor(validate): decompose _type_check_params into per-parameter helpersJun 22, 2026
…elpers (#716)
Split the 372-line, CCN~164 _type_check_params into 19 module-private
_check_* helpers, each validating one parameter group in place; the function
is now a flat ordered sequence of calls. Behavior-preserving: the call order
(hence the first-raised error for any input) and all param_dict mutations are
identical. Verified by a 370-case old-vs-new differential (0 mismatches) and
the full non-visual suite (510 passed).
Notable: contour_px keeps two checks at their original positions (type before
color, range after outline) and _check_contour_px_range re-fetches contour_px
from param_dict; the interleaved cmap/palette/groups region stays one helper.
Adds a direct order-preservation test (color before contour_px range).
@timtreis
timtreisforce-pushed the refactor/issue-716-type-check-params branch from 1e2f8ab to fbfa9b4CompareJune 22, 2026 10:46
…#716)
Hoist the stateless circle->hexagon/square/circle converters to module level and
dedup the copy-pasted convex-hull enclosing-circle computation into a single
_enclosing_circle helper (was duplicated across the polygon and multipolygon
paths). _convert_shapes keeps only the closures that bind max_extent / the
warn_shape_size flag. Behavior-preserving: verified byte-identical geometry
output (old vs new) across circles/polygons/multipolygons x circle/hex/visium_hex/square.
@codecov-commenter

codecov-commenter commented Jun 22, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 84.21053% with 15 lines in your changes missing coverage. Please review.
✅ Project coverage is 79.59%. Comparing base (e454700) to head (6bf751c).

Files with missing linesPatch %Lines
src/spatialdata_plot/pl/_color.py57.57%10 Missing and 4 partials ⚠️
src/spatialdata_plot/pl/_geometry.py95.45%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #741 +/- ##
==========================================
+ Coverage 79.31% 79.59% +0.27% 
==========================================
Files 17 17 Lines 4603 4641 +38 Branches 1030 1029 -1 ==========================================
+ Hits 3651 3694 +43 + Misses 602 598 -4 + Partials 350 349 -1 
Files with missing linesCoverage Δ
src/spatialdata_plot/pl/_validate.py70.67% <100.00%> (+2.10%)⬆️
src/spatialdata_plot/pl/_geometry.py79.53% <95.45%> (-0.65%)⬇️
src/spatialdata_plot/pl/_color.py69.76% <57.57%> (+0.45%)⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@timtreistimtreis changed the title refactor(validate): decompose _type_check_params into per-parameter helpersrefactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec (#716)Jun 22, 2026
…ource_vec (#716)
Pull the three self-contained decision blocks out of the 236-line color resolver:
_resolve_color_origins (locate + df/table shadowing + multi-origin error),
_fetch_color_source_vector (direct-read fast path vs whole-table join), and
_resolve_color_table (which table supplies .uns colors). _set_color_source_vec
drops 236->171 lines (CCN ~48->~29); the categorical-mapping and output assembly
stay inline. Behavior-preserving: verified byte-identical (source_vector,
color_vector, categorical) output over 160 cases (element x color-column x palette
x groups x render_type); full non-visual suite green (510 passed).
@timtreis
timtreisforce-pushed the refactor/issue-716-type-check-params branch from 2ef6a86 to 6bf751cCompareJune 22, 2026 11:07
@timtreistimtreis changed the title refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec (#716)refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vecJun 22, 2026
@timtreis
timtreis merged commit 50a6606 into mainJun 22, 2026
7 of 8 checks passed
@timtreis
timtreis deleted the refactor/issue-716-type-check-params branch June 22, 2026 11:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor: decompose the 4 relocated mega-functions (_type_check_params, _set_color_source_vec, _get_collection_shape, _convert_shapes)

2 participants

@timtreis@codecov-commenter
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec - #741

Merged
timtreis merged 3 commits into
mainfrom
refactor/issue-716-type-check-params
Jun 22, 2026
Merged

refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec#741
timtreis merged 3 commits into
mainfrom
refactor/issue-716-type-check-params

Conversation

@timtreis

@timtreistimtreis commented Jun 22, 2026

Copy link
Copy Markdown
Member

Closes#716. Decomposes the relocated mega-functions, one commit per function for bisectability.

Commits

  1. _type_check_params (_validate.py, 372 lines / CCN≈164) → 19 module-private _check_* helpers + a flat ordered orchestrator (CCN≈1). Behavior-preserving: call order (first-raised error) and all param_dict mutations identical. contour_px keeps its split type/range checks at their original positions; the interleaved cmap/palette/groups region stays one element_type-aware helper. Verified: 370-case old-vs-main differential, 0 mismatches; new test_type_check_params_preserves_validation_order.
  2. _convert_shapes (_geometry.py) → hoisted the stateless circle→hex/square/circle converters to module level and deduped the copy-pasted convex-hull into one _enclosing_circle. Verified: byte-identical geometry output across circles/polygons/multipolygons × circle/hex/visium_hex/square.
  3. _set_color_source_vec (_color.py, 236 lines / CCN≈48 → 171 / CCN≈29) → extracted _resolve_color_origins, _fetch_color_source_vector, _resolve_color_table (the categorical-mapping + output assembly stay inline). Verified: byte-identical (source_vector, color_vector, categorical) over 160 cases (element × color-column × palette × groups × render_type).

Not done (deliberately)

_get_collection_shape — the issue listed it (CCN 39), but #699 has since shrunk it to 65 lines / CCN≈17, below the decomposition bar. Left as-is.

Verification

Full non-visual suite 510 passed on each step. The two rendering-output functions (_convert_shapes, _set_color_source_vec) are additionally locked by the differential harnesses above; final visual sign-off is CI baselines.

@timtreistimtreis changed the title refactor(validate): decompose _type_check_params into per-parameter helpers (#716)refactor(validate): decompose _type_check_params into per-parameter helpersJun 22, 2026
…elpers (#716)
Split the 372-line, CCN~164 _type_check_params into 19 module-private
_check_* helpers, each validating one parameter group in place; the function
is now a flat ordered sequence of calls. Behavior-preserving: the call order
(hence the first-raised error for any input) and all param_dict mutations are
identical. Verified by a 370-case old-vs-new differential (0 mismatches) and
the full non-visual suite (510 passed).
Notable: contour_px keeps two checks at their original positions (type before
color, range after outline) and _check_contour_px_range re-fetches contour_px
from param_dict; the interleaved cmap/palette/groups region stays one helper.
Adds a direct order-preservation test (color before contour_px range).
@timtreis
timtreisforce-pushed the refactor/issue-716-type-check-params branch from 1e2f8ab to fbfa9b4CompareJune 22, 2026 10:46
…#716)
Hoist the stateless circle->hexagon/square/circle converters to module level and
dedup the copy-pasted convex-hull enclosing-circle computation into a single
_enclosing_circle helper (was duplicated across the polygon and multipolygon
paths). _convert_shapes keeps only the closures that bind max_extent / the
warn_shape_size flag. Behavior-preserving: verified byte-identical geometry
output (old vs new) across circles/polygons/multipolygons x circle/hex/visium_hex/square.
@codecov-commenter

codecov-commenter commented Jun 22, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 84.21053% with 15 lines in your changes missing coverage. Please review.
✅ Project coverage is 79.59%. Comparing base (e454700) to head (6bf751c).

Files with missing linesPatch %Lines
src/spatialdata_plot/pl/_color.py57.57%10 Missing and 4 partials ⚠️
src/spatialdata_plot/pl/_geometry.py95.45%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #741 +/- ##
==========================================
+ Coverage 79.31% 79.59% +0.27% 
==========================================
Files 17 17 Lines 4603 4641 +38 Branches 1030 1029 -1 ==========================================
+ Hits 3651 3694 +43 + Misses 602 598 -4 + Partials 350 349 -1 
Files with missing linesCoverage Δ
src/spatialdata_plot/pl/_validate.py70.67% <100.00%> (+2.10%)⬆️
src/spatialdata_plot/pl/_geometry.py79.53% <95.45%> (-0.65%)⬇️
src/spatialdata_plot/pl/_color.py69.76% <57.57%> (+0.45%)⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@timtreistimtreis changed the title refactor(validate): decompose _type_check_params into per-parameter helpersrefactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec (#716)Jun 22, 2026
…ource_vec (#716)
Pull the three self-contained decision blocks out of the 236-line color resolver:
_resolve_color_origins (locate + df/table shadowing + multi-origin error),
_fetch_color_source_vector (direct-read fast path vs whole-table join), and
_resolve_color_table (which table supplies .uns colors). _set_color_source_vec
drops 236->171 lines (CCN ~48->~29); the categorical-mapping and output assembly
stay inline. Behavior-preserving: verified byte-identical (source_vector,
color_vector, categorical) output over 160 cases (element x color-column x palette
x groups x render_type); full non-visual suite green (510 passed).
@timtreis
timtreisforce-pushed the refactor/issue-716-type-check-params branch from 2ef6a86 to 6bf751cCompareJune 22, 2026 11:07
@timtreistimtreis changed the title refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec (#716)refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vecJun 22, 2026
@timtreis
timtreis merged commit 50a6606 into mainJun 22, 2026
7 of 8 checks passed
@timtreis
timtreis deleted the refactor/issue-716-type-check-params branch June 22, 2026 11:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor: decompose the 4 relocated mega-functions (_type_check_params, _set_color_source_vec, _get_collection_shape, _convert_shapes)

2 participants

@timtreis@codecov-commenter
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec - #741

Merged
timtreis merged 3 commits into
mainfrom
refactor/issue-716-type-check-params
Jun 22, 2026
Merged

refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec#741
timtreis merged 3 commits into
mainfrom
refactor/issue-716-type-check-params

Conversation

@timtreis

@timtreistimtreis commented Jun 22, 2026

Copy link
Copy Markdown
Member

Closes#716. Decomposes the relocated mega-functions, one commit per function for bisectability.

Commits

  1. _type_check_params (_validate.py, 372 lines / CCN≈164) → 19 module-private _check_* helpers + a flat ordered orchestrator (CCN≈1). Behavior-preserving: call order (first-raised error) and all param_dict mutations identical. contour_px keeps its split type/range checks at their original positions; the interleaved cmap/palette/groups region stays one element_type-aware helper. Verified: 370-case old-vs-main differential, 0 mismatches; new test_type_check_params_preserves_validation_order.
  2. _convert_shapes (_geometry.py) → hoisted the stateless circle→hex/square/circle converters to module level and deduped the copy-pasted convex-hull into one _enclosing_circle. Verified: byte-identical geometry output across circles/polygons/multipolygons × circle/hex/visium_hex/square.
  3. _set_color_source_vec (_color.py, 236 lines / CCN≈48 → 171 / CCN≈29) → extracted _resolve_color_origins, _fetch_color_source_vector, _resolve_color_table (the categorical-mapping + output assembly stay inline). Verified: byte-identical (source_vector, color_vector, categorical) over 160 cases (element × color-column × palette × groups × render_type).

Not done (deliberately)

_get_collection_shape — the issue listed it (CCN 39), but #699 has since shrunk it to 65 lines / CCN≈17, below the decomposition bar. Left as-is.

Verification

Full non-visual suite 510 passed on each step. The two rendering-output functions (_convert_shapes, _set_color_source_vec) are additionally locked by the differential harnesses above; final visual sign-off is CI baselines.

@timtreistimtreis changed the title refactor(validate): decompose _type_check_params into per-parameter helpers (#716)refactor(validate): decompose _type_check_params into per-parameter helpersJun 22, 2026
…elpers (#716)
Split the 372-line, CCN~164 _type_check_params into 19 module-private
_check_* helpers, each validating one parameter group in place; the function
is now a flat ordered sequence of calls. Behavior-preserving: the call order
(hence the first-raised error for any input) and all param_dict mutations are
identical. Verified by a 370-case old-vs-new differential (0 mismatches) and
the full non-visual suite (510 passed).
Notable: contour_px keeps two checks at their original positions (type before
color, range after outline) and _check_contour_px_range re-fetches contour_px
from param_dict; the interleaved cmap/palette/groups region stays one helper.
Adds a direct order-preservation test (color before contour_px range).
@timtreis
timtreisforce-pushed the refactor/issue-716-type-check-params branch from 1e2f8ab to fbfa9b4CompareJune 22, 2026 10:46
…#716)
Hoist the stateless circle->hexagon/square/circle converters to module level and
dedup the copy-pasted convex-hull enclosing-circle computation into a single
_enclosing_circle helper (was duplicated across the polygon and multipolygon
paths). _convert_shapes keeps only the closures that bind max_extent / the
warn_shape_size flag. Behavior-preserving: verified byte-identical geometry
output (old vs new) across circles/polygons/multipolygons x circle/hex/visium_hex/square.
@codecov-commenter

codecov-commenter commented Jun 22, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 84.21053% with 15 lines in your changes missing coverage. Please review.
✅ Project coverage is 79.59%. Comparing base (e454700) to head (6bf751c).

Files with missing linesPatch %Lines
src/spatialdata_plot/pl/_color.py57.57%10 Missing and 4 partials ⚠️
src/spatialdata_plot/pl/_geometry.py95.45%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #741 +/- ##
==========================================
+ Coverage 79.31% 79.59% +0.27% 
==========================================
Files 17 17 Lines 4603 4641 +38 Branches 1030 1029 -1 ==========================================
+ Hits 3651 3694 +43 + Misses 602 598 -4 + Partials 350 349 -1 
Files with missing linesCoverage Δ
src/spatialdata_plot/pl/_validate.py70.67% <100.00%> (+2.10%)⬆️
src/spatialdata_plot/pl/_geometry.py79.53% <95.45%> (-0.65%)⬇️
src/spatialdata_plot/pl/_color.py69.76% <57.57%> (+0.45%)⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@timtreistimtreis changed the title refactor(validate): decompose _type_check_params into per-parameter helpersrefactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec (#716)Jun 22, 2026
…ource_vec (#716)
Pull the three self-contained decision blocks out of the 236-line color resolver:
_resolve_color_origins (locate + df/table shadowing + multi-origin error),
_fetch_color_source_vector (direct-read fast path vs whole-table join), and
_resolve_color_table (which table supplies .uns colors). _set_color_source_vec
drops 236->171 lines (CCN ~48->~29); the categorical-mapping and output assembly
stay inline. Behavior-preserving: verified byte-identical (source_vector,
color_vector, categorical) output over 160 cases (element x color-column x palette
x groups x render_type); full non-visual suite green (510 passed).
@timtreis
timtreisforce-pushed the refactor/issue-716-type-check-params branch from 2ef6a86 to 6bf751cCompareJune 22, 2026 11:07
@timtreistimtreis changed the title refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec (#716)refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vecJun 22, 2026
@timtreis
timtreis merged commit 50a6606 into mainJun 22, 2026
7 of 8 checks passed
@timtreis
timtreis deleted the refactor/issue-716-type-check-params branch June 22, 2026 11:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor: decompose the 4 relocated mega-functions (_type_check_params, _set_color_source_vec, _get_collection_shape, _convert_shapes)

2 participants

@timtreis@codecov-commenter
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec - #741

Merged
timtreis merged 3 commits into
mainfrom
refactor/issue-716-type-check-params
Jun 22, 2026
Merged

refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec#741
timtreis merged 3 commits into
mainfrom
refactor/issue-716-type-check-params

Conversation

@timtreis

@timtreistimtreis commented Jun 22, 2026

Copy link
Copy Markdown
Member

Closes#716. Decomposes the relocated mega-functions, one commit per function for bisectability.

Commits

  1. _type_check_params (_validate.py, 372 lines / CCN≈164) → 19 module-private _check_* helpers + a flat ordered orchestrator (CCN≈1). Behavior-preserving: call order (first-raised error) and all param_dict mutations identical. contour_px keeps its split type/range checks at their original positions; the interleaved cmap/palette/groups region stays one element_type-aware helper. Verified: 370-case old-vs-main differential, 0 mismatches; new test_type_check_params_preserves_validation_order.
  2. _convert_shapes (_geometry.py) → hoisted the stateless circle→hex/square/circle converters to module level and deduped the copy-pasted convex-hull into one _enclosing_circle. Verified: byte-identical geometry output across circles/polygons/multipolygons × circle/hex/visium_hex/square.
  3. _set_color_source_vec (_color.py, 236 lines / CCN≈48 → 171 / CCN≈29) → extracted _resolve_color_origins, _fetch_color_source_vector, _resolve_color_table (the categorical-mapping + output assembly stay inline). Verified: byte-identical (source_vector, color_vector, categorical) over 160 cases (element × color-column × palette × groups × render_type).

Not done (deliberately)

_get_collection_shape — the issue listed it (CCN 39), but #699 has since shrunk it to 65 lines / CCN≈17, below the decomposition bar. Left as-is.

Verification

Full non-visual suite 510 passed on each step. The two rendering-output functions (_convert_shapes, _set_color_source_vec) are additionally locked by the differential harnesses above; final visual sign-off is CI baselines.

@timtreistimtreis changed the title refactor(validate): decompose _type_check_params into per-parameter helpers (#716)refactor(validate): decompose _type_check_params into per-parameter helpersJun 22, 2026
…elpers (#716)
Split the 372-line, CCN~164 _type_check_params into 19 module-private
_check_* helpers, each validating one parameter group in place; the function
is now a flat ordered sequence of calls. Behavior-preserving: the call order
(hence the first-raised error for any input) and all param_dict mutations are
identical. Verified by a 370-case old-vs-new differential (0 mismatches) and
the full non-visual suite (510 passed).
Notable: contour_px keeps two checks at their original positions (type before
color, range after outline) and _check_contour_px_range re-fetches contour_px
from param_dict; the interleaved cmap/palette/groups region stays one helper.
Adds a direct order-preservation test (color before contour_px range).
@timtreis
timtreisforce-pushed the refactor/issue-716-type-check-params branch from 1e2f8ab to fbfa9b4CompareJune 22, 2026 10:46
…#716)
Hoist the stateless circle->hexagon/square/circle converters to module level and
dedup the copy-pasted convex-hull enclosing-circle computation into a single
_enclosing_circle helper (was duplicated across the polygon and multipolygon
paths). _convert_shapes keeps only the closures that bind max_extent / the
warn_shape_size flag. Behavior-preserving: verified byte-identical geometry
output (old vs new) across circles/polygons/multipolygons x circle/hex/visium_hex/square.
@codecov-commenter

codecov-commenter commented Jun 22, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 84.21053% with 15 lines in your changes missing coverage. Please review.
✅ Project coverage is 79.59%. Comparing base (e454700) to head (6bf751c).

Files with missing linesPatch %Lines
src/spatialdata_plot/pl/_color.py57.57%10 Missing and 4 partials ⚠️
src/spatialdata_plot/pl/_geometry.py95.45%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #741 +/- ##
==========================================
+ Coverage 79.31% 79.59% +0.27% 
==========================================
Files 17 17 Lines 4603 4641 +38 Branches 1030 1029 -1 ==========================================
+ Hits 3651 3694 +43 + Misses 602 598 -4 + Partials 350 349 -1 
Files with missing linesCoverage Δ
src/spatialdata_plot/pl/_validate.py70.67% <100.00%> (+2.10%)⬆️
src/spatialdata_plot/pl/_geometry.py79.53% <95.45%> (-0.65%)⬇️
src/spatialdata_plot/pl/_color.py69.76% <57.57%> (+0.45%)⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@timtreistimtreis changed the title refactor(validate): decompose _type_check_params into per-parameter helpersrefactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec (#716)Jun 22, 2026
…ource_vec (#716)
Pull the three self-contained decision blocks out of the 236-line color resolver:
_resolve_color_origins (locate + df/table shadowing + multi-origin error),
_fetch_color_source_vector (direct-read fast path vs whole-table join), and
_resolve_color_table (which table supplies .uns colors). _set_color_source_vec
drops 236->171 lines (CCN ~48->~29); the categorical-mapping and output assembly
stay inline. Behavior-preserving: verified byte-identical (source_vector,
color_vector, categorical) output over 160 cases (element x color-column x palette
x groups x render_type); full non-visual suite green (510 passed).
@timtreis
timtreisforce-pushed the refactor/issue-716-type-check-params branch from 2ef6a86 to 6bf751cCompareJune 22, 2026 11:07
@timtreistimtreis changed the title refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec (#716)refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vecJun 22, 2026
@timtreis
timtreis merged commit 50a6606 into mainJun 22, 2026
7 of 8 checks passed
@timtreis
timtreis deleted the refactor/issue-716-type-check-params branch June 22, 2026 11:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor: decompose the 4 relocated mega-functions (_type_check_params, _set_color_source_vec, _get_collection_shape, _convert_shapes)

2 participants

@timtreis@codecov-commenter
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec - #741

Merged
timtreis merged 3 commits into
mainfrom
refactor/issue-716-type-check-params
Jun 22, 2026
Merged

refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec#741
timtreis merged 3 commits into
mainfrom
refactor/issue-716-type-check-params

Conversation

@timtreis

@timtreistimtreis commented Jun 22, 2026

Copy link
Copy Markdown
Member

Closes#716. Decomposes the relocated mega-functions, one commit per function for bisectability.

Commits

  1. _type_check_params (_validate.py, 372 lines / CCN≈164) → 19 module-private _check_* helpers + a flat ordered orchestrator (CCN≈1). Behavior-preserving: call order (first-raised error) and all param_dict mutations identical. contour_px keeps its split type/range checks at their original positions; the interleaved cmap/palette/groups region stays one element_type-aware helper. Verified: 370-case old-vs-main differential, 0 mismatches; new test_type_check_params_preserves_validation_order.
  2. _convert_shapes (_geometry.py) → hoisted the stateless circle→hex/square/circle converters to module level and deduped the copy-pasted convex-hull into one _enclosing_circle. Verified: byte-identical geometry output across circles/polygons/multipolygons × circle/hex/visium_hex/square.
  3. _set_color_source_vec (_color.py, 236 lines / CCN≈48 → 171 / CCN≈29) → extracted _resolve_color_origins, _fetch_color_source_vector, _resolve_color_table (the categorical-mapping + output assembly stay inline). Verified: byte-identical (source_vector, color_vector, categorical) over 160 cases (element × color-column × palette × groups × render_type).

Not done (deliberately)

_get_collection_shape — the issue listed it (CCN 39), but #699 has since shrunk it to 65 lines / CCN≈17, below the decomposition bar. Left as-is.

Verification

Full non-visual suite 510 passed on each step. The two rendering-output functions (_convert_shapes, _set_color_source_vec) are additionally locked by the differential harnesses above; final visual sign-off is CI baselines.

@timtreistimtreis changed the title refactor(validate): decompose _type_check_params into per-parameter helpers (#716)refactor(validate): decompose _type_check_params into per-parameter helpersJun 22, 2026
…elpers (#716)
Split the 372-line, CCN~164 _type_check_params into 19 module-private
_check_* helpers, each validating one parameter group in place; the function
is now a flat ordered sequence of calls. Behavior-preserving: the call order
(hence the first-raised error for any input) and all param_dict mutations are
identical. Verified by a 370-case old-vs-new differential (0 mismatches) and
the full non-visual suite (510 passed).
Notable: contour_px keeps two checks at their original positions (type before
color, range after outline) and _check_contour_px_range re-fetches contour_px
from param_dict; the interleaved cmap/palette/groups region stays one helper.
Adds a direct order-preservation test (color before contour_px range).
@timtreis
timtreisforce-pushed the refactor/issue-716-type-check-params branch from 1e2f8ab to fbfa9b4CompareJune 22, 2026 10:46
…#716)
Hoist the stateless circle->hexagon/square/circle converters to module level and
dedup the copy-pasted convex-hull enclosing-circle computation into a single
_enclosing_circle helper (was duplicated across the polygon and multipolygon
paths). _convert_shapes keeps only the closures that bind max_extent / the
warn_shape_size flag. Behavior-preserving: verified byte-identical geometry
output (old vs new) across circles/polygons/multipolygons x circle/hex/visium_hex/square.
@codecov-commenter

codecov-commenter commented Jun 22, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 84.21053% with 15 lines in your changes missing coverage. Please review.
✅ Project coverage is 79.59%. Comparing base (e454700) to head (6bf751c).

Files with missing linesPatch %Lines
src/spatialdata_plot/pl/_color.py57.57%10 Missing and 4 partials ⚠️
src/spatialdata_plot/pl/_geometry.py95.45%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #741 +/- ##
==========================================
+ Coverage 79.31% 79.59% +0.27% 
==========================================
Files 17 17 Lines 4603 4641 +38 Branches 1030 1029 -1 ==========================================
+ Hits 3651 3694 +43 + Misses 602 598 -4 + Partials 350 349 -1 
Files with missing linesCoverage Δ
src/spatialdata_plot/pl/_validate.py70.67% <100.00%> (+2.10%)⬆️
src/spatialdata_plot/pl/_geometry.py79.53% <95.45%> (-0.65%)⬇️
src/spatialdata_plot/pl/_color.py69.76% <57.57%> (+0.45%)⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@timtreistimtreis changed the title refactor(validate): decompose _type_check_params into per-parameter helpersrefactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec (#716)Jun 22, 2026
…ource_vec (#716)
Pull the three self-contained decision blocks out of the 236-line color resolver:
_resolve_color_origins (locate + df/table shadowing + multi-origin error),
_fetch_color_source_vector (direct-read fast path vs whole-table join), and
_resolve_color_table (which table supplies .uns colors). _set_color_source_vec
drops 236->171 lines (CCN ~48->~29); the categorical-mapping and output assembly
stay inline. Behavior-preserving: verified byte-identical (source_vector,
color_vector, categorical) output over 160 cases (element x color-column x palette
x groups x render_type); full non-visual suite green (510 passed).
@timtreis
timtreisforce-pushed the refactor/issue-716-type-check-params branch from 2ef6a86 to 6bf751cCompareJune 22, 2026 11:07
@timtreistimtreis changed the title refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vec (#716)refactor: decompose _type_check_params, _convert_shapes, _set_color_source_vecJun 22, 2026
@timtreis
timtreis merged commit 50a6606 into mainJun 22, 2026
7 of 8 checks passed
@timtreis
timtreis deleted the refactor/issue-716-type-check-params branch June 22, 2026 11:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor: decompose the 4 relocated mega-functions (_type_check_params, _set_color_source_vec, _get_collection_shape, _convert_shapes)

2 participants

@timtreis@codecov-commenter