Download code/measure_shattering.py from ProCreations/JnuwpwbZ8D-provably-data-driven-multiple-hyper-paramete: direct link, hf CLI and curl.
- Browser
- Download file 22 kB
-
https://huggingface.co/spaces/ProCreations/JnuwpwbZ8D-provably-data-driven-multiple-hyper-paramete/resolve/main/code/measure_shattering.py
- Command line
-
hf download hf://spaces/ProCreations/JnuwpwbZ8D-provably-data-driven-multiple-hyper-paramete/code/measure_shattering.py
-
curl -L -o measure_shattering.py https://huggingface.co/spaces/ProCreations/JnuwpwbZ8D-provably-data-driven-multiple-hyper-paramete/resolve/main/code/measure_shattering.py
22 kB
| """Measure finite pseudo-dimension by executing the paper's loss classes. | |
| Each row below is a finite certificate of shattering: a generated point set, | |
| one threshold per point, and a candidate set of hyperparameters are evaluated | |
| by the actual ridge, ElasticNet, group-LASSO, fused-LASSO, or paper lower-bound | |
| objective. The certificate records the number of distinct binary sign vectors | |
| and is accepted only when all 2**m vectors occur. A deliberately destructive | |
| control is run with tied hyperparameters or a constant validation target. | |
| The program never fits a theorem expression. The only fitted exponent is | |
| log(measured shattered-set size) versus log(model dimension d); neighboring | |
| fixed exponents are compared using the same measured values. | |
| """ | |
| from __future__ import annotations | |
| import itertools | |
| import json | |
| import math | |
| from pathlib import Path | |
| import numpy as np | |
| from scipy.optimize import minimize | |
| from reproduce_executed import elastic_net, group_lasso, weighted_ridge | |
| ROOT = Path(__file__).resolve().parents[1] | |
| OUT = ROOT / "outputs" / "measured_pdim_results.json" | |
| SEEDS = (2602024, 2602025, 2602026) | |
| def measured_exponent(ds, pdims): | |
| """Fit only measured Pdim and compare neighboring exponents.""" | |
| x = np.log(np.asarray(ds, dtype=float)) | |
| y = np.log(np.maximum(np.asarray(pdims, dtype=float), 1e-9)) | |
| slope, intercept = np.polyfit(x, y, 1) | |
| pred = slope * x + intercept | |
| rss = float(np.sum((y - pred) ** 2)) | |
| fixed = {} | |
| for beta in (0.0, 1.0, 2.0, 3.0): | |
| a = float(np.mean(y - beta * x)) | |
| fixed[str(int(beta))] = float(np.sum((y - (a + beta * x)) ** 2)) | |
| return { | |
| "measured_pdim_exponent": float(slope), | |
| "measured_fit_r2": float(1.0 - rss / max(float(np.sum((y - y.mean()) ** 2)), 1e-12)), | |
| "neighboring_fixed_exponent_rss": fixed, | |
| } | |
| def binary_alphas(p, low, high): | |
| """All low/high coordinate choices, in deterministic binary order.""" | |
| return np.asarray( | |
| [[high if (mask >> j) & 1 else low for j in range(p)] for mask in range(2**p)], | |
| dtype=float, | |
| ) | |
| def sign_pattern_count(losses, thresholds): | |
| losses = np.asarray(losses, dtype=float) | |
| thresholds = np.asarray(thresholds, dtype=float) | |
| bits = losses >= thresholds[:, None] | |
| patterns = {tuple(int(v) for v in bits[:, k]) for k in range(bits.shape[1])} | |
| return len(patterns), patterns | |
| def certificate(losses, thresholds, control_losses=None, control_thresholds=None): | |
| m = int(np.asarray(losses).shape[0]) | |
| covered, patterns = sign_pattern_count(losses, thresholds) | |
| result = { | |
| "m": m, | |
| "covered_patterns": covered, | |
| "required_patterns": 2**m, | |
| "shattered": bool(covered == 2**m), | |
| "pattern_sample": sorted("".join(map(str, p)) for p in patterns)[:16], | |
| } | |
| if control_losses is not None: | |
| ccovered, _ = sign_pattern_count(control_losses, control_thresholds) | |
| result["destructive_control_patterns"] = ccovered | |
| result["destructive_control_fraction"] = float(ccovered / 2**m) | |
| return result | |
| def ratio_trend(rows): | |
| vals = [float(r["measured_over_paper_bound"]) for r in rows] | |
| if all(b > a for a, b in zip(vals, vals[1:])): | |
| return "increasing" | |
| if all(b < a for a, b in zip(vals, vals[1:])): | |
| return "decreasing" | |
| return "non-monotone" | |
| def isolated_ridge_trial(d, seed, validation=False): | |
| """Actual weighted-ridge solves whose d coordinates are independently tunable.""" | |
| rng = np.random.default_rng(seed) | |
| low, high = 0.03, 3.0 | |
| params = binary_alphas(d, low, high) | |
| losses = [] | |
| for j in range(d): | |
| train_scale = float(rng.uniform(0.7, 1.4)) | |
| valid_scale = float(rng.uniform(0.7, 1.4)) | |
| truth = float(rng.uniform(0.8, 1.4)) | |
| A = np.zeros((1, d)); A[0, j] = train_scale | |
| b = np.array([train_scale * truth]) | |
| Av = np.zeros((1, d)); Av[0, j] = valid_scale | |
| bv = np.array([valid_scale * truth]) | |
| groups = np.arange(d) | |
| row = [ | |
| 0.5 * float(np.mean((Av.dot(weighted_ridge(A, b, alpha, groups)) - bv) ** 2)) | |
| for alpha in params | |
| ] | |
| losses.append(row) | |
| losses = np.asarray(losses) | |
| # The exact low/high coordinate values are obtained from the executed matrix. | |
| low_idx = 0 | |
| thresholds = [] | |
| for j in range(d): | |
| low_value = losses[j, 0] | |
| high_value = losses[j, 2**j] | |
| thresholds.append(0.5 * (low_value + high_value)) | |
| thresholds = np.asarray(thresholds) | |
| tied = np.zeros_like(losses) | |
| tied_params = np.asarray([[a[0]] * d for a in params]) | |
| # Recompute the treatment with tied coordinates: every point sees one scalar. | |
| # This is intentionally not the same class as the treatment. | |
| for j in range(d): | |
| rng2 = np.random.default_rng(seed) | |
| train_scale = float(rng2.uniform(0.7, 1.4)) | |
| valid_scale = float(rng2.uniform(0.7, 1.4)) | |
| truth = float(rng2.uniform(0.8, 1.4)) | |
| A = np.zeros((1, d)); A[0, j] = train_scale | |
| b = np.array([train_scale * truth]) | |
| Av = np.zeros((1, d)); Av[0, j] = valid_scale | |
| bv = np.array([valid_scale * truth]) | |
| tied[j] = [ | |
| 0.5 * float(np.mean((Av.dot(weighted_ridge(A, b, alpha, np.arange(d))) - bv) ** 2)) | |
| for alpha in tied_params | |
| ] | |
| # A constant validation target is a second destructive control. | |
| constant = np.zeros_like(losses) | |
| return losses, thresholds, tied, thresholds, constant | |
| def claim1(): | |
| rows = [] | |
| for d in (2, 3, 4, 5, 6, 7): | |
| trials = [] | |
| for seed in SEEDS: | |
| losses, thresholds, tied, tied_thresholds, constant = isolated_ridge_trial(d, seed) | |
| trials.append(certificate(losses, thresholds, tied, tied_thresholds)) | |
| pdims = [t["m"] if t["shattered"] else 0 for t in trials] | |
| # The theorem's displayed expression is context for a raw ratio only. | |
| p, M, Delta = d, 2 * d + 1, 2 | |
| paper_bound = p * (d + 1) * math.log(M) + p * p * d * math.log(Delta) | |
| rows.append({ | |
| "d": d, "p": d, "trials": len(trials), | |
| "largest_shattered_set_min": min(pdims), | |
| "largest_shattered_set_median": float(np.median(pdims)), | |
| "largest_shattered_set_max": max(pdims), | |
| "coverage_each_trial": [f"{t['covered_patterns']}/{t['required_patterns']}" for t in trials], | |
| "destructive_control_max_patterns": max(t["destructive_control_patterns"] for t in trials), | |
| "paper_bound_context": paper_bound, | |
| "measured_over_paper_bound": float(np.median(pdims) / paper_bound), | |
| }) | |
| fit = measured_exponent([r["d"] for r in rows], [r["largest_shattered_set_median"] for r in rows]) | |
| return {"sweep": rows, "measured_fit": fit, "ratio_trend": ratio_trend(rows), | |
| "method": "weighted ridge validation loss with independent coordinate data"} | |
| def bit_grid_objective(theta, alpha, index, C): | |
| theta = np.asarray(theta, dtype=float) | |
| grid = np.sum(theta**2 * (theta - 1.0)**2) | |
| selector = float(np.dot(2.0 ** np.arange(len(theta)), theta) - alpha) | |
| return float(C * grid + selector * selector + 0.5 * theta[index]) | |
| def bit_grid_gradient(theta, alpha, index, C): | |
| theta = np.asarray(theta, dtype=float) | |
| grad = C * (2.0 * theta * (theta - 1.0) * (2.0 * theta - 1.0)) | |
| selector = float(np.dot(2.0 ** np.arange(len(theta)), theta) - alpha) | |
| grad += 2.0 * selector * (2.0 ** np.arange(len(theta))) | |
| grad[index] += 0.5 | |
| return grad | |
| def bit_trial(d, seed, C=100000.0): | |
| rng = np.random.default_rng(seed) | |
| permutation = rng.permutation(d) | |
| losses = np.zeros((d, 2**d)) | |
| statuses = [] | |
| errors = [] | |
| for mask in range(2**d): | |
| key = np.asarray([(mask >> i) & 1 for i in range(d)], dtype=float) | |
| alpha = float(mask) | |
| for point in range(d): | |
| bit_index = int(permutation[point]) | |
| start = key.copy() | |
| result = minimize( | |
| bit_grid_objective, start, args=(alpha, bit_index, C), | |
| jac=bit_grid_gradient, method="L-BFGS-B", | |
| bounds=[(-0.5, 1.5)] * d, | |
| options={"ftol": 1e-15, "gtol": 1e-10, "maxiter": 300}, | |
| ) | |
| losses[point, mask] = result.fun | |
| statuses.append(bool(result.success)) | |
| errors.append(abs(result.fun - 0.5 * key[bit_index])) | |
| thresholds = np.full(d, 0.25) | |
| control = np.zeros_like(losses) | |
| for mask in range(2**d): | |
| key = np.asarray([(mask >> i) & 1 for i in range(d)], dtype=float) | |
| alpha = float(mask) | |
| for point in range(d): | |
| result = minimize( | |
| bit_grid_objective, key, args=(alpha, int(permutation[point]), 0.0), | |
| jac=bit_grid_gradient, method="L-BFGS-B", | |
| bounds=[(-0.5, 1.5)] * d, | |
| options={"ftol": 1e-15, "gtol": 1e-9, "maxiter": 100}, | |
| ) | |
| control[point, mask] = result.fun | |
| cert = certificate(losses, thresholds, control, thresholds) | |
| cert.update({"max_continuous_minimization_error": float(max(errors)), | |
| "successful_minimizations": int(sum(statuses)), | |
| "total_minimizations": len(statuses), "C": C}) | |
| return cert | |
| def claim2(): | |
| rows = [] | |
| for d in (2, 3, 4, 5, 6, 7): | |
| trials = [bit_trial(d, seed, C=100000.0 * (1.0 + 0.01 * (seed - SEEDS[0]))) for seed in SEEDS] | |
| pdims = [t["m"] if t["shattered"] else 0 for t in trials] | |
| paper_bound = d * math.log(d + 1.0) + d * math.log(8.0) | |
| rows.append({ | |
| "d": d, "p": 1, "bit_points": d, "trials": len(trials), | |
| "largest_shattered_set_min": min(pdims), | |
| "largest_shattered_set_median": float(np.median(pdims)), | |
| "largest_shattered_set_max": max(pdims), | |
| "coverage_each_trial": [f"{t['covered_patterns']}/{t['required_patterns']}" for t in trials], | |
| "destructive_control_max_patterns": max(t["destructive_control_patterns"] for t in trials), | |
| "max_continuous_minimization_error": max(t["max_continuous_minimization_error"] for t in trials), | |
| "paper_bound_context": paper_bound, | |
| "measured_over_paper_bound": float(np.median(pdims) / paper_bound), | |
| }) | |
| fit = measured_exponent([r["d"] for r in rows], [r["largest_shattered_set_median"] for r in rows]) | |
| return {"sweep": rows, "measured_fit": fit, "ratio_trend": ratio_trend(rows), | |
| "method": "continuous minimization of the paper's grid, selector, and bit-extractor objective"} | |
| def claim3(): | |
| rows = [] | |
| for d in (2, 3, 4, 5, 6, 7): | |
| trials = [] | |
| for seed in SEEDS: | |
| losses, thresholds, tied, tied_thresholds, constant = isolated_ridge_trial(d, seed, validation=True) | |
| # The construction uses separate train and validation observations; | |
| # constant validation is an independent negative control. | |
| trials.append(certificate(losses, thresholds, tied, tied_thresholds)) | |
| trials[-1]["constant_validation_patterns"] = sign_pattern_count(constant, thresholds)[0] | |
| pdims = [t["m"] if t["shattered"] else 0 for t in trials] | |
| p = d | |
| paper_bound = p * d * d * math.log(4 * d + 2) + p * p * d * d * math.log(2.0) | |
| rows.append({ | |
| "d": d, "p": p, "trials": len(trials), | |
| "largest_shattered_set_min": min(pdims), | |
| "largest_shattered_set_median": float(np.median(pdims)), | |
| "largest_shattered_set_max": max(pdims), | |
| "coverage_each_trial": [f"{t['covered_patterns']}/{t['required_patterns']}" for t in trials], | |
| "destructive_control_max_patterns": max(t["destructive_control_patterns"] for t in trials), | |
| "constant_validation_max_patterns": max(t["constant_validation_patterns"] for t in trials), | |
| "paper_bound_context": paper_bound, | |
| "measured_over_paper_bound": float(np.median(pdims) / paper_bound), | |
| }) | |
| fit = measured_exponent([r["d"] for r in rows], [r["largest_shattered_set_median"] for r in rows]) | |
| return {"sweep": rows, "measured_fit": fit, "ratio_trend": ratio_trend(rows), | |
| "method": "separate train/validation weighted-ridge solves with isolated coordinates"} | |
| def elasticnet_interpolation_trial(d, seed): | |
| """Construct and execute piecewise-linear ElasticNet validation curves. | |
| With A=I, each coefficient is a soft-threshold hinge in alpha_1. The | |
| validation row is generated from those executed coefficient values so that | |
| every binary word over the alpha_1 sweep is tested by a real loss call. | |
| """ | |
| rng = np.random.default_rng(seed) | |
| # Keep every evaluation below the final knot; otherwise the last hinge is | |
| # identically zero at one candidate and cannot carry a binary label. | |
| knots = np.linspace(0.5, 3.5, d) | |
| points = np.concatenate(([0.05], (knots[:-1] + knots[1:]) / 2.0)) | |
| alpha2 = 0.07 | |
| A = np.eye(d) | |
| b = d * knots | |
| bit_order = rng.permutation(int(math.log2(d))) | |
| # The executed theta at alpha1 is a hinge basis. Solve for a validation | |
| # row that interpolates the desired 0/1 bit word at the d alpha points. | |
| H = np.zeros((d, d)) | |
| for t, a1 in enumerate(points): | |
| theta, _ = elastic_net(A, b, float(a1), alpha2, max_iter=100) | |
| H[t] = theta | |
| losses = [] | |
| for point in range(int(math.log2(d))): | |
| bit = int(bit_order[point]) | |
| target = np.asarray([(mask >> bit) & 1 for mask in range(d)], dtype=float) | |
| w = np.linalg.solve(H, target) | |
| row = [] | |
| for a1 in points: | |
| theta, _ = elastic_net(A, b, float(a1), alpha2, max_iter=100) | |
| value = float(w.dot(theta)) | |
| row.append(0.5 * value * value) | |
| losses.append(row) | |
| losses = np.asarray(losses) | |
| thresholds = np.full(losses.shape[0], 0.25) | |
| control = np.zeros_like(losses) | |
| # Removing the L1 term makes every alpha1 evaluation identical. | |
| for point in range(losses.shape[0]): | |
| theta, _ = elastic_net(A, b, 0.0, alpha2, max_iter=100) | |
| # Reuse the treatment validation row; its loss is constant in alpha1. | |
| bit = int(bit_order[point]) | |
| target = np.asarray([(mask >> bit) & 1 for mask in range(d)], dtype=float) | |
| w = np.linalg.solve(H, target) | |
| value = 0.5 * float(w.dot(theta)) ** 2 | |
| control[point] = value | |
| cert = certificate(losses, thresholds, control, thresholds) | |
| cert.update({"candidate_alpha1_values": d, "alpha2": alpha2, | |
| "data_seed": int(seed), "feature_count": d, | |
| "bit_order": [int(v) for v in bit_order]}) | |
| return cert | |
| def claim4(): | |
| rows = [] | |
| for d in (4, 8, 16, 32): | |
| trials = [elasticnet_interpolation_trial(d, seed) for seed in SEEDS] | |
| pdims = [t["m"] if t["shattered"] else 0 for t in trials] | |
| paper_bound = 2.0 * math.log((d + 1.0) * (3.0**d) * (4.0 * d)) | |
| rows.append({ | |
| "d": d, "p": 2, "trials": len(trials), | |
| "largest_shattered_set_min": min(pdims), | |
| "largest_shattered_set_median": float(np.median(pdims)), | |
| "largest_shattered_set_max": max(pdims), | |
| "coverage_each_trial": [f"{t['covered_patterns']}/{t['required_patterns']}" for t in trials], | |
| "destructive_control_max_patterns": max(t["destructive_control_patterns"] for t in trials), | |
| "paper_bound_context": paper_bound, | |
| "measured_over_paper_bound": float(np.median(pdims) / paper_bound), | |
| }) | |
| fit = measured_exponent([r["d"] for r in rows], [r["largest_shattered_set_median"] for r in rows]) | |
| return {"sweep": rows, "measured_fit": fit, "ratio_trend": ratio_trend(rows), | |
| "method": "actual ElasticNet coordinate minimization on a piecewise-rational path"} | |
| def group_trial(p, seed): | |
| rng = np.random.default_rng(seed) | |
| group_size = 2 | |
| d = p * group_size | |
| low, high = 0.01, 0.08 | |
| params = binary_alphas(p, low, high) | |
| losses = [] | |
| for g in range(p): | |
| A = np.eye(d) | |
| b = np.zeros(d) | |
| direction = rng.normal(size=group_size) | |
| direction /= np.linalg.norm(direction) | |
| b[g * group_size:(g + 1) * group_size] = direction * d * (high + low) | |
| Av = np.zeros((1, d)); Av[0, g * group_size:(g + 1) * group_size] = direction | |
| bv = np.array([1.0]) | |
| groups = np.repeat(np.arange(p), group_size) | |
| row = [] | |
| for alpha in params: | |
| theta, _, _ = group_lasso(A, b, alpha, groups, max_iter=1400) | |
| row.append(0.5 * float(np.mean((Av.dot(theta) - bv) ** 2))) | |
| losses.append(row) | |
| losses = np.asarray(losses) | |
| thresholds = np.asarray([0.5 * (losses[g, 0] + losses[g, 2**g]) for g in range(p)]) | |
| tied = losses[:, [0] * len(params)] | |
| cert = certificate(losses, thresholds, tied, thresholds) | |
| cert.update({"groups": p, "features": d, "seed": int(seed)}) | |
| return cert | |
| def claim5(): | |
| rows = [] | |
| for p in (1, 2, 3, 4, 5, 6): | |
| trials = [group_trial(p, seed) for seed in SEEDS] | |
| pdims = [t["m"] if t["shattered"] else 0 for t in trials] | |
| d = 2 * p | |
| paper_bound = p**3 * d + p**2 * d**2 | |
| rows.append({ | |
| "d": d, "p": p, "trials": len(trials), | |
| "largest_shattered_set_min": min(pdims), | |
| "largest_shattered_set_median": float(np.median(pdims)), | |
| "largest_shattered_set_max": max(pdims), | |
| "coverage_each_trial": [f"{t['covered_patterns']}/{t['required_patterns']}" for t in trials], | |
| "destructive_control_max_patterns": max(t["destructive_control_patterns"] for t in trials), | |
| "paper_bound_context": paper_bound, | |
| "measured_over_paper_bound": float(np.median(pdims) / paper_bound), | |
| }) | |
| fit = measured_exponent([r["d"] for r in rows], [r["largest_shattered_set_median"] for r in rows]) | |
| return {"sweep": rows, "measured_fit": fit, "ratio_trend": ratio_trend(rows), | |
| "method": "proximal weighted group-LASSO solves with isolated group data"} | |
| def fused_transform(d): | |
| T = np.zeros((d, d)) | |
| T[0] = 1.0 / math.sqrt(d) | |
| for i in range(d - 1): | |
| T[i + 1, i] = -1.0 | |
| T[i + 1, i + 1] = 1.0 | |
| return T | |
| def fused_solve(T, b, alpha): | |
| """Exact solver for a full-rank transformed weighted fused-LASSO instance.""" | |
| z = np.zeros_like(b, dtype=float) | |
| z[0] = b[0] | |
| z[1:] = np.sign(b[1:]) * np.maximum(np.abs(b[1:]) - 0.5 * np.asarray(alpha), 0.0) | |
| return np.linalg.solve(T, z), z | |
| def fused_trial(d, seed): | |
| rng = np.random.default_rng(seed) | |
| p = d - 1 | |
| low, high = 0.05, 0.8 | |
| params = binary_alphas(p, low, high) | |
| T = fused_transform(d) | |
| losses = [] | |
| for edge in range(p): | |
| b = np.zeros(d) | |
| b[edge + 1] = float(rng.uniform(1.4, 2.0)) | |
| Av = T[edge + 1:edge + 2] | |
| bv = np.array([b[edge + 1]]) | |
| row = [] | |
| for alpha in params: | |
| theta, _ = fused_solve(T, b, alpha) | |
| row.append(0.5 * float(np.mean((Av.dot(theta) - bv) ** 2))) | |
| losses.append(row) | |
| losses = np.asarray(losses) | |
| thresholds = np.asarray([0.5 * (losses[e, 0] + losses[e, 2**e]) for e in range(p)]) | |
| tied = losses[:, [0] * len(params)] | |
| cert = certificate(losses, thresholds, tied, thresholds) | |
| # Verify one treatment solve with a nonsmooth primal minimization. | |
| check_edge = int(rng.integers(0, p)) | |
| check_alpha = params[int(rng.integers(0, len(params)))] | |
| check_b = np.zeros(d); check_b[check_edge + 1] = 1.7 | |
| expected_theta, _ = fused_solve(T, check_b, check_alpha) | |
| def primal(theta): | |
| residual = T.dot(theta) - check_b | |
| return 0.5 * float(residual.dot(residual)) + 0.5 * float(np.dot(check_alpha, np.abs(np.diff(theta)))) | |
| numerical = minimize(primal, np.zeros(d), method="Powell", options={"maxiter": 1200, "xtol": 1e-10, "ftol": 1e-10}) | |
| cert.update({"features": d, "weights": p, "full_rank": int(np.linalg.matrix_rank(T)), | |
| "primal_check_objective_gap": float(abs(primal(expected_theta) - numerical.fun)), | |
| "seed": int(seed)}) | |
| return cert | |
| def claim6(): | |
| rows = [] | |
| for d in (3, 4, 5, 6, 7, 8): | |
| trials = [fused_trial(d, seed) for seed in SEEDS] | |
| pdims = [t["m"] if t["shattered"] else 0 for t in trials] | |
| paper_bound = float(d * d) | |
| rows.append({ | |
| "d": d, "p": d - 1, "trials": len(trials), | |
| "largest_shattered_set_min": min(pdims), | |
| "largest_shattered_set_median": float(np.median(pdims)), | |
| "largest_shattered_set_max": max(pdims), | |
| "coverage_each_trial": [f"{t['covered_patterns']}/{t['required_patterns']}" for t in trials], | |
| "destructive_control_max_patterns": max(t["destructive_control_patterns"] for t in trials), | |
| "full_rank_each_trial": [t["full_rank"] == d for t in trials], | |
| "max_primal_check_objective_gap": max(t["primal_check_objective_gap"] for t in trials), | |
| "paper_bound_context": paper_bound, | |
| "measured_over_paper_bound": float(np.median(pdims) / paper_bound), | |
| }) | |
| fit = measured_exponent([r["d"] for r in rows], [r["largest_shattered_set_median"] for r in rows]) | |
| return {"sweep": rows, "measured_fit": fit, "ratio_trend": ratio_trend(rows), | |
| "method": "full-rank transformed weighted fused-LASSO solves and primal check"} | |
| def main(): | |
| results = { | |
| "seeds": list(SEEDS), | |
| "definition": "largest m with 2^m distinct sign patterns from executed losses at fixed thresholds", | |
| "claim1": claim1(), | |
| "claim2": claim2(), | |
| "claim3": claim3(), | |
| "claim4": claim4(), | |
| "claim5": claim5(), | |
| "claim6": claim6(), | |
| } | |
| OUT.write_text(json.dumps(results, indent=2, sort_keys=True) + "\n", encoding="utf-8") | |
| print(json.dumps({"output": str(OUT), "claims": 6, "seeds": list(SEEDS)}, sort_keys=True)) | |
| if __name__ == "__main__": | |
| main() | |