summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYurenHao0426 <Blackhao0426@gmail.com>2026-08-29 18:47:30 -0500
committerYurenHao0426 <Blackhao0426@gmail.com>2026-08-29 18:47:30 -0500
commit12ac9bc6da1ef8ef77fac9def07d66e8fc379b6d (patch)
tree97d0ec00aeb4cbf9ec77ba2bb7db4c97cfbc877a
parent3856daa3124b8dfce6bd0285646e5a92f0ff96aa (diff)
test: verify large-grid edges affect CLLN outputs
-rw-r--r--experiments/coupled_ladder_audit.py36
-rw-r--r--results/coupled_ladder/x0_locality_audit.json6
2 files changed, 41 insertions, 1 deletions
diff --git a/experiments/coupled_ladder_audit.py b/experiments/coupled_ladder_audit.py
index 13692b9..fa8c599 100644
--- a/experiments/coupled_ladder_audit.py
+++ b/experiments/coupled_ladder_audit.py
@@ -26,6 +26,7 @@ from sdil.physical_grid import ( # noqa: E402
GridSquareLawImperfection,
RingClassificationDataset,
edge_voltage_drops,
+ output_difference,
)
@@ -82,6 +83,29 @@ def main() -> None:
)
kcl_residual = maximum_unknown_kcl_residual(
side32, gates32, state32)
+ sensitivity_indices = np.unique(np.linspace(
+ 0, side32.edge_count - 1, 128, dtype=int))
+ sensitivity_step_v = 1e-5
+ sampled_sensitivities = []
+ sources32 = side32.source_values(*dataset.inputs_v[0])
+ for edge in sensitivity_indices:
+ gates_plus = gates32.copy()
+ gates_minus = gates32.copy()
+ gates_plus[edge] += sensitivity_step_v
+ gates_minus[edge] -= sensitivity_step_v
+ output_plus = output_difference(
+ side32,
+ solve_linear_grid_state(side32, gates_plus, sources32),
+ )
+ output_minus = output_difference(
+ side32,
+ solve_linear_grid_state(side32, gates_minus, sources32),
+ )
+ sampled_sensitivities.append(
+ (output_plus - output_minus) / (2.0 * sensitivity_step_v))
+ absolute_sensitivities = np.abs(np.asarray(sampled_sensitivities))
+ sampled_influence_fraction = float(np.mean(
+ absolute_sensitivities > 1e-9))
edge_count = side4.edge_count
rng = np.random.default_rng(20260829)
@@ -158,6 +182,8 @@ def main() -> None:
"released_side4_layout_exact": layout_exact,
"released_side4_gate_vector_exact": tiling_exact,
"side32_kcl_residual_below_1e_12": kcl_residual < 1e-12,
+ "side32_sampled_edges_influence_output": (
+ sampled_influence_fraction == 1.0),
"common_mode_cancellation_below_1e_12": (
common_mode_cancellation_error < 1e-12),
"default_imperfection_is_state_dependent": (
@@ -176,6 +202,15 @@ def main() -> None:
"checks": checks,
"measurements": {
"side32_maximum_unknown_kcl_residual_a": kcl_residual,
+ "side32_sampled_edge_count": len(sensitivity_indices),
+ "side32_sampled_output_sensitivity_min_abs": float(
+ np.min(absolute_sensitivities)),
+ "side32_sampled_output_sensitivity_median_abs": float(
+ np.median(absolute_sensitivities)),
+ "side32_sampled_output_sensitivity_max_abs": float(
+ np.max(absolute_sensitivities)),
+ "side32_sampled_influence_fraction_above_1e_9": (
+ sampled_influence_fraction),
"common_mode_cancellation_max_abs_v_per_s": (
common_mode_cancellation_error),
"state_dependent_neutral_bias_difference_rms_v_per_s": (
@@ -201,4 +236,3 @@ def main() -> None:
if __name__ == "__main__":
main()
-
diff --git a/results/coupled_ladder/x0_locality_audit.json b/results/coupled_ladder/x0_locality_audit.json
index a21f9c0..cd41471 100644
--- a/results/coupled_ladder/x0_locality_audit.json
+++ b/results/coupled_ladder/x0_locality_audit.json
@@ -6,6 +6,7 @@
"released_side4_layout_exact": true,
"released_side4_gate_vector_exact": true,
"side32_kcl_residual_below_1e_12": true,
+ "side32_sampled_edges_influence_output": true,
"common_mode_cancellation_below_1e_12": true,
"default_imperfection_is_state_dependent": true,
"ideal_paths_have_identical_gates": true,
@@ -15,6 +16,11 @@
},
"measurements": {
"side32_maximum_unknown_kcl_residual_a": 8.646088809098271e-19,
+ "side32_sampled_edge_count": 128,
+ "side32_sampled_output_sensitivity_min_abs": 5.488387522234461e-08,
+ "side32_sampled_output_sensitivity_median_abs": 9.380685117577059e-06,
+ "side32_sampled_output_sensitivity_max_abs": 0.00011643896263846541,
+ "side32_sampled_influence_fraction_above_1e_9": 1.0,
"common_mode_cancellation_max_abs_v_per_s": 3.552713678800501e-15,
"state_dependent_neutral_bias_difference_rms_v_per_s": 1.0419674628075035,
"ideal_path_max_gate_difference_v": 0.0,