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:
@@ -59,7 +59,9 @@ def resistance_factor(thickness_m: float, freq_hz: float,
|
||||
|
||||
|
||||
def parse_frequency(text: str) -> float:
|
||||
"""'0', '100k', '1.5M', '142500' -> Hz. Empty/invalid -> 0 (DC)."""
|
||||
"""'0', '100k', '1.5M', '142500' -> Hz; empty -> 0 (DC).
|
||||
Raises ValueError on unparseable or negative input (a typo silently
|
||||
becoming DC would mislabel the result)."""
|
||||
t = text.strip().lower().replace(",", ".").removesuffix("hz").strip()
|
||||
if not t:
|
||||
return 0.0
|
||||
@@ -72,7 +74,7 @@ def parse_frequency(text: str) -> float:
|
||||
mult, t = 1e3, t[:-1]
|
||||
elif t.endswith("g"):
|
||||
mult, t = 1e9, t[:-1]
|
||||
try:
|
||||
return max(0.0, float(t) * mult)
|
||||
except ValueError:
|
||||
return 0.0
|
||||
value = float(t) * mult # ValueError on garbage
|
||||
if value < 0:
|
||||
raise ValueError(f"negative frequency: {text!r}")
|
||||
return value
|
||||
|
||||
Reference in New Issue
Block a user