Integrate frozen negative density over polynomial root intervals
This commit is contained in:
@@ -40,6 +40,16 @@ def close(left, right, label, rtol=2e-10, atol=1e-15):
|
||||
f"{label}: {left} != {right}")
|
||||
|
||||
|
||||
def require_complete_hashes(record):
|
||||
required = {'metadata.txt', 'density_summary.csv', 'density_elements.csv', 'density_radial_bins.csv',
|
||||
'density_physical.csv', 'negative_density_samples.csv', 'negative_density_projection_elements.csv',
|
||||
'production_closure_rules.csv', 'production_closure_residual_full.txt',
|
||||
'projection_production_closure_residual_full.txt', 'observed_density_coefficients.txt',
|
||||
'density_invariants.csv', 'density_element_topology.csv', 'density_surface_traces.csv'}
|
||||
required.update(f'negative_density_projection_{control}_coefficients.txt' for control in ('production', 'q18', 'q26'))
|
||||
require(required <= record['output_hashes'].keys(), 'Run record omits a consumed artifact hash.')
|
||||
|
||||
|
||||
def clean(value):
|
||||
if isinstance(value, dict):
|
||||
return {str(k): clean(v) for k, v in value.items()}
|
||||
@@ -121,6 +131,8 @@ def audit_case(folder):
|
||||
matching = [r for r in projection_rows if r['control'] == control]
|
||||
maximum = float(np.max(np.abs(delta)))
|
||||
close(maximum, max(float(r['coefficient_maximum_difference']) for r in matching), 'coefficient error summary')
|
||||
close(float(np.linalg.norm(delta)), math.sqrt(math.fsum(float(r['coefficient_difference_norm']) ** 2 for r in matching)),
|
||||
'coefficient difference norm assembled from disjoint elements')
|
||||
for row in matching:
|
||||
require(float(row['constant_coefficient_error_maximum']) < 1e-10 and
|
||||
float(row['constant_sample_error_maximum']) < 1e-10,
|
||||
@@ -212,6 +224,7 @@ def main():
|
||||
name = case['id']
|
||||
run = json.loads((campaign / (name + '_run.json')).read_text())
|
||||
require(run['exit_code'] == 0 and run['inputs_unchanged'], f'Incomplete frozen diagnostic: {name}')
|
||||
require_complete_hashes(run)
|
||||
for relative, value in run['output_hashes'].items():
|
||||
require(digest(campaign / name / relative) == value, f'Changed output: {name}/{relative}')
|
||||
for path, value in run['input_state_hashes'].items():
|
||||
|
||||
Reference in New Issue
Block a user