Fix solver correctness and input-validation issues from code review
- Refuse the uniform contact model when the fills form multiple disconnected copper groups that each touch both terminals: the prescribed injection split is ill-posed and the grounded system was singular, silently returning garbage (e.g. negative gigaohms). connected_restrict now reports the component count; a power-balance backstop (SolverError) catches any other inconsistent solve. - Connect via/pad barrels to the nearest fill copper within the pad footprint (+1 cell) instead of only the exact center cell, so thermal-relief spokes still stitch layers; barrels that reach fill on fewer than two layers are warned about. ViaLink gains pad_nm (extracted from the padstack, JSON-roundtripped). - Validate dialog input on OK (layers, current > 0, cell > 0, parseable frequency, extra Cu >= 0) with an inline error instead of silently substituting defaults; parse_frequency raises on garbage; pipeline rejects i_test <= 0; choose_cell_size rejects non-positive overrides. - Warn when a contact part is dropped by the connectivity restriction; floor instead of truncate in cell_of; correct the uniform-model summary line; drop an unused variable; refresh plugin.json wording. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -112,6 +112,17 @@ def test_test_current_scaling():
|
||||
assert r10.P_total == pytest.approx(100 * r1.P_total, rel=1e-9)
|
||||
|
||||
|
||||
def test_nonpositive_test_current_rejected():
|
||||
"""i_test <= 0 would divide by zero in the percentage reporting;
|
||||
it must be rejected up front with a clean user-facing message."""
|
||||
from fill_resistance import pipeline
|
||||
from fill_resistance.errors import UserFacingError
|
||||
p = strip_problem()
|
||||
for bad in (0.0, -1.0):
|
||||
with pytest.raises(UserFacingError, match="Test current"):
|
||||
pipeline.run(p, None, show=False, i_test=bad)
|
||||
|
||||
|
||||
def test_power_identity():
|
||||
"""Sum of edge powers equals I^2 R exactly for the direct solve."""
|
||||
p = make_problem(
|
||||
|
||||
Reference in New Issue
Block a user